in

Uso del modo sin cabeza en la plataforma Java SE

Este artículo explica cómo utilizar las capacidades del modo sin cabeza de la plataforma Java, Standard Edition (Java SE, anteriormente conocido como J2SE).

Modo sin cabeza es una configuración del sistema en la que falta el dispositivo de visualización, el teclado o el mouse. Suena inesperado, pero en realidad puede realizar diferentes operaciones en este modo, incluso con datos gráficos.

¿Dónde es aplicable? Digamos que su aplicación genera repetidamente una determinada imagen, por ejemplo, un código de autorización gráfico que debe cambiarse cada vez que un usuario inicia sesión en el sistema. Al crear una imagen, su aplicación no necesita ni la pantalla ni el teclado. Supongamos ahora que tiene un mainframe o servidor dedicado en su proyecto que no tiene dispositivo de visualización, teclado o mouse. La decisión ideal es utilizar la potencia informática sustancial de este entorno para las características visuales y no visuales. Una imagen que se generó en el sistema de modo sin cabeza se puede pasar al cabeza llena sistema para su posterior renderizado.

Nota: Este artículo dirigirá al lector a la documentación de la versión 6 de la plataforma Java SE. Cualquier adición de API u otras mejoras a la especificación de la plataforma Java SE están sujetas a revisión y aprobación por parte del Grupo de expertos JSR 270.

Kit de herramientas

los java.awt.Toolkit class es una superclase abstracta de todas las implementaciones reales del Abstract Window Toolkit (AWT). Las subclases de Toolkit se utilizan para vincular los diversos componentes de AWT a implementaciones de kits de herramientas nativas particulares.

Muchos componentes se ven afectados si no se admite un dispositivo de visualización, un teclado o un mouse. Un constructor de clase apropiado lanza un HeadlessException:

Estos componentes pesados ​​requieren un par en el nivel del sistema operativo, lo que no se puede garantizar en máquinas sin cabeza.

Los métodos relacionados con los componentes Canvas, Panel e Image no necesitan lanzar un HeadlessException porque a estos componentes se les pueden dar pares vacíos y tratarlos como componentes ligeros.

El kit de herramientas Headless también vincula los componentes de la tecnología Java a los recursos nativos, pero lo hace cuando los recursos no incluyen un dispositivo de visualización o dispositivos de entrada.

Entorno de gráficos

los java.awt.GraphicsEnvironment class es una clase abstracta que describe la colección de GraphicsDevice objetos y Font objetos disponibles para una aplicación de tecnología Java en una plataforma particular. Los recursos en este GraphicsEnvironment puede ser local o en una máquina remota. GraphicsDevice Los objetos pueden ser monitores, impresoras o búferes de imágenes y son el destino de Graphics2D métodos de dibujo. Cada GraphicsDevice tiene muchos GraphicsConfiguration objetos asociados con él. Estos objetos especifican las diferentes configuraciones en las que el GraphicsDevice puede ser usado.

La Tabla 1 muestra la GraphicsEnvironment métodos que comprueban la compatibilidad con el modo sin cabeza.

Tabla 1. Los métodos del modo sin cabeza

Nota la isHeadless() El método comprueba la propiedad específica del sistema. java.awt.headless, en lugar de la configuración de hardware del sistema.

A HeadlessException se lanza cuando el código que depende de un dispositivo de visualización, teclado o mouse se llama en un entorno que no admite ninguno de estos. La excepción se deriva de una UnsupportedOperationException, que a su vez se deriva de un RuntimeException.

Configuración del modo sin cabeza

Para usar las operaciones del modo sin cabeza, primero debe comprender cómo verificar y configurar las propiedades del sistema relacionadas con este modo. Además, debe comprender cómo crear un kit de herramientas predeterminado para usar la implementación sin cabeza de la clase Toolkit.

Configuración de propiedades del sistema

Para configurar el modo sin cabeza, establezca la propiedad del sistema adecuada mediante el setProperty() método. Este método le permite establecer el valor deseado para la propiedad del sistema que se indica mediante la clave específica.

System.setProperty("java.awt.headless", "true");

En este código, java.awt.headless es una propiedad del sistema, y true es un valor que se le asigna.

También puede usar la siguiente línea de comando si planea ejecutar la misma aplicación en un entorno tradicional y sin cabeza:

java -Djava.awt.headless=true

Creación de kit de herramientas predeterminado

Si una propiedad del sistema llamada java.awt.headless se establece en true, entonces se utiliza la implementación sin cabeza de Toolkit. Utilizar el getDefaultToolkit() método del Toolkit class para crear una instancia de kit de herramientas sin cabeza:

Toolkit tk = Toolkit.getDefaultToolkit();

Comprobación del modo sin cabeza

Para comprobar la disponibilidad del modo sin cabeza, utilice el isHeadless() método del GraphicsEnvironment clase:


GraphicsEnvironment ge = 
GraphicsEnvironment.getLocalGraphicsEnvironment(); 
boolean headless_check = ge.isHeadless();

Este método comprueba el java.awt.headless propiedad del sistema. Si esta propiedad tiene un true valor, luego un HeadlessException será arrojado desde áreas del Toolkit y GraphicsEnvironment clases que dependen de un dispositivo de visualización, teclado o mouse.

Funcionamiento en modo sin cabeza

Después de configurar el modo sin cabeza y crear una instancia del kit de herramientas sin cabeza, su aplicación puede realizar las siguientes operaciones:

  • Cree componentes ligeros como Canvas, Panel y Swing, excepto los niveles superiores
  • Obtenga información sobre fuentes disponibles, métricas de fuentes y configuraciones de fuentes
  • Establecer el color para la representación de texto y gráficos
  • Cree y obtenga imágenes y prepare imágenes para renderizar
  • Imprimir usando java.awt.PrintJob, java.awt.print.*, y javax.print.* clases
  • Emite un pitido de audio

Lienzo

El siguiente código representa un área rectangular en blanco de la pantalla en la que puede dibujar líneas. Para crear un nuevo componente Canvas, use el Canvas clase.


final Canvas c = new Canvas()
        {
            public void paint(Graphics g)
            {
                Rectangle r = getBounds();
                g.drawLine(0, 0, r.width - 1, r.height - 1);
                g.drawLine(0, r.height - 1, r.width - 1, 0);
            }
        };

Fuentes

Este código muestra cómo configurar la fuente con el Font class para dibujar una cadena de texto. los Graphics El objeto se utiliza para representar esta cadena.


public void paint(Graphics g)
            {
                g.setFont(new Font("Arial", Font.ITALIC, 12));
                g.drawString("Test", 32, 8);
            }

Colores

Este código muestra cómo establecer el color con los valores especificados de rojo, verde y azul para dibujar una línea. los Graphics El objeto se utiliza para representar esta línea.


  public void paint(Graphics g)
            {
                g.setColor(new Color(255, 127, 0));
                g.drawLine(0, r.height - 1, r.width - 1, 0);
            } 

Imagenes

En el siguiente código, el read método del javax.imageio.ImageIO la clase decodifica el grapefruit.jpg El archivo de imagen devuelve una imagen almacenada en búfer.


        Image i = null;
        try
        {
            File f = new File("grapefruit.jpg");
            i = ImageIO.read(f);
        }
        catch (Exception z)
        {
            z.printStackTrace(System.err);
        }

los grapefruit.jpg Archivo de imagen

Impresión

Este código muestra cómo imprimir un lienzo preparado que le permite definir la impresora como la superficie predeterminada para el paint método.


    PrinterJob pj = PrinterJob.getPrinterJob();
       pj.setPrintable(new Printable()
       {
           public int print(Graphics g, PageFormat pf, int pageIndex)
           {
               if (pageIndex > 0)
               {
                   return Printable.NO_SUCH_PAGE;
               }

               ((Graphics2D)g).translate(pf.getImageableX(),
                                         pf.getImageableY());

               // Paint canvas.
               c.paint(g);

               return Printable.PAGE_EXISTS;
           }
       });

Bip

El siguiente código muestra cómo producir un simple pitido usando el Toolkit clase beep método.


Toolkit tk = Toolkit.getDefaultToolkit();
      tk.beep();

Uso del modo sin cabeza: un ejemplo

El seguimiento HeadlessBasics ejemplo utiliza todas las capacidades descritas en este artículo.

Para ejecutar este ejemplo, compile el siguiente código usando el javac compilador. Copie el archivo de imagen grapefruit.jpg al directorio que contiene el HeadlessBasics clase.


import java.awt.*;
import java.io.*;
import java.awt.print.*;

import javax.imageio.*;

public class HeadlessBasics
{
    public static void main(String[] args)
    {
        // Set system property.
        // Call this BEFORE the toolkit has been initialized, that is,
        // before Toolkit.getDefaultToolkit() has been called.
        System.setProperty("java.awt.headless", "true");

        // This triggers creation of the toolkit.
        // Because java.awt.headless property is set to true, this 
        // will be an instance of headless toolkit.
        Toolkit tk = Toolkit.getDefaultToolkit();
        // Standard beep is available.
        tk.beep();

        // Check whether the application is
        // running in headless mode.
        GraphicsEnvironment ge = 
        GraphicsEnvironment.getLocalGraphicsEnvironment();
        System.out.println("Headless mode: " + ge.isHeadless());

        // No top levels are allowed.
        boolean created = false;
        try
        {
            Frame f = new Frame("Frame");
            created = true;
        }
        catch (Exception z)
        {
            z.printStackTrace(System.err);
            created = false;
        }
        System.err.println("Frame is created: " + created);

        // No other components except Canvas and Panel are allowed.
        created = false;
        try
        {
            Button b = new Button("Button");
            created = true;
        }
        catch (Exception z)
        {
            z.printStackTrace(System.err);
            created = false;
        }
        System.err.println("Button is created: " + created);
        
        // Canvases can be created.
        final Canvas c = new Canvas()
        {
            public void paint(Graphics g)
            {
                Rectangle r = getBounds();
                g.drawLine(0, 0, r.width - 1, r.height - 1);
                // Colors work too.
                g.setColor(new Color(255, 127, 0));
                g.drawLine(0, r.height - 1, r.width - 1, 0);
                // And fonts
                g.setFont(new Font("Arial", Font.ITALIC, 12));
                g.drawString("Test", 32, 8);
            }
        };
        // And all the operations work correctly.
        c.setBounds(32, 32, 128, 128);

        // Images are available.
        Image i = null;
        try
        {
            File f = new File("grapefruit.jpg");
            i = ImageIO.read(f);
        }
        catch (Exception z)
        {
        ...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

logo aplicacion photoshop 1

Cómo cambiar la cara en Photoshop

Propiedad de contenido CSS