In diesem Artikel wird vorgestellt, wie der Kopflosenmodus auf der Standard -Java -Plattform (Java SE, auch bekannt als J2SE) verwendet wird.
Der Kopflosenmodus ist eine Systemkonfiguration, wenn die Anzeige, Tastatur oder Maus fehlen. Es klingt unglaublich, aber in diesem Modus können Sie in diesem Modus auch mit grafischen Daten unterschiedliche Vorgänge ausführen.
Wo kann ich dieses Modell verwenden? Denken Sie über Ihre Anwendung nach, um ein Bild zu generieren. Beim Erstellen von Bildern müssen Sie weder das Display noch die Tastatur anwenden. Nehmen wir an, dass Ihre Anwendung jetzt über eine Hauptarchitektur oder einen proprietären Server verfügt, aber dieser Dienst hat keine Anzeige, Tastatur oder Maus. Die ideale Entscheidung besteht darin, eine große Anzahl von visuellen Rechenleistung anstelle von nicht visuellen Eigenschaften zu verwenden. Das im kopflosen Modus erzeugte Bild kann zum tieferen Rendering an das Kopf -System übergeben werden.
Es gibt viele Methoden in der Klasse von Java.awt.toolkit und Java.awt.Graphics Environment. Einige Kategorien wie Leinwand und Panel können jedoch im kopflosen Modus ausgeführt werden. Nach der J2SE 1.4 -Plattform unterstützt sie den kopflosen Modus.
Hinweis: Dieser Artikel konzentriert sich auf das Dokument der Java SE6 -Plattformversion. Jede API oder andere verbesserte Java SE -Plattformen werden von der JSR270 Expert Group (JSR 270 Expert Group) überprüft und genehmigt.
Toolkit
Java.awt.toolkit Klasse ist eine abstrakte übergeordnete Klasse von abstraktem Fenster -Toolkit (AWT). Die Unterklassen von Toolkit werden verwendet, um verschiedene AWT -Komponenten an ein bestimmtes lokales Toolkit zu binden.
Viele Komponenten sind betroffen, wenn das Gerät, die Tastatur oder die Maus nicht unterstützt werden. Ein geeigneter Konstruktor sollte eine HeadlessException -Ausnahme auswerfen:
Diese Schwergewichtskomponente erfordert eine grafische Funktion des Peer -Peer -Levels, um sie zu unterstützen.
Komponenten, die sich auf Leinwand-, Panel- und Bildkomponenten beziehen, müssen die HeadlessException -Anomalien nicht werfen, da diese Komponenten leere Funktionen auf Betriebssystemebene verwenden und dann als leichte Komponenten verarbeitet werden.
Das Toolkit of Headless bindet auch Java -Komponenten an lokale Ressourcen, dies wird jedoch nur dann nur dann ausführen, wenn die Ressource keine Anzeigegeräte oder Eingabegeräte enthält.
Grafikumgebung
Die Java.awt.Graphicsenvalonment -Klasse ist eine abstrakte Klasse, die eine Sammlung von Graphics -Device -Objekten und Schriftobjekten beschreibt, die in einer bestimmten Plattform in der Java -Technologie verwendet werden können. Die Ressourcen in der GraphicsenValonment können lokale oder lange Ausrüstung sein. Das GraphicsDevice -Objekt kann ein Display-, Drucker- oder Grafik -Cache sein und das Ziel der Grafik2D -Zeichnungsfunktion. Jedes GraphicsDevice verfügt über viele Grafikkonfigurationsobjekte, die sich darauf beziehen. Diese Objekte geben unterschiedliche Konfigurationsumgebungen an, und in diesen Konfigurationsumgebungen kann GraphicsDevice verwendet werden.
Tabelle 1 zeigt die Graphicsenvalonment -Methode und überprüfen Sie den Headless -Modusunterstützung
Tabelle 1. Methode der Kopflosenmodus
Hinweis: Isheadless () überprüft die spezifischen Systemattribute, java.awt.headless anstelle der Systemhardwarekonfiguration.
Der von HeadlessException geworfene Code hängt von Display, Tastatur und Maus als Umgebung ab, die keine davon unterstützt.
Stellen Sie den Kopflosenmodus ein
Verwenden Sie den kopflosen Modus, um zu arbeiten. Sie müssen zunächst verstehen, wie Sie die damit verbundenen Systemattribute überprüfen und festlegen. Darüber hinaus müssen Sie verstehen, wie Sie eine kopflose Implementierungsklasse erstellen, um eine Symbolleiste zu verwenden.
Systemattributkonfiguration
Um den kopflosen Modus zu aktivieren, müssen Sie die Methode setProperty () verwenden, um die entsprechenden Systemattribute festzulegen. Mit dieser Methode können Sie das Systemattribut mit dem erwarteten Wert festlegen.
System.setProperty ("java.awt.headless", "true");Im obigen Code ist Java.awt.headless ein Systemattribut, und wahr ist der Wert, den wir festgelegt haben.
Wenn Sie die kopflose und traditionelle Umgebung in einem der gleichen Programme verwenden möchten, können Sie die folgende Befehlszeile verwenden, um zu vervollständigen:
java -djava.awt.headless = true
Erstellen Sie das Standard -Toolkit
Wenn die Systemattribute des Namens von Java.awt.headless auf True eingestellt sind, wird das kopflose Toolkit verwendet. Verwenden Sie als Nächstes die Methode getDefaulttoolkit (), um eine Instanz eines kopflosen Tools zu erstellen:
Toolkit tk = Toolkit.getDefaulttoolkit ();
Kopfloser Modusprüfung
Verwenden Sie die Verwendbarkeit des Headess -Modus, um die Methode isheadless () der Graphics -Umweltklasse zu verwenden ::
Graphicsumvironment GE = Graphics -Environment.GetLocalgraphicsumvironment ();
Diese Methode überprüft Java.awt.headless Systemattribute. Wenn dieses Attribut einen Wert von true hat, wird ein HeadlessException aus einem Toolkit und einer Abhängigkeit von einer Display-, Tastatur- und Maus -Graphics -Envalonment -Klasse geworfen.
Betrieb im kopflosen Modus
Nach dem Einrichten des kopflosen Modus und dem Erstellen einer Instanz des kopflosen Toolkits kann Ihre Anwendung die folgenden Vorgänge ausführen:
Leinwand (Leinwand)
Der folgende Code zeichnet einen leeren rechteckigen Bereich auf dem Bildschirm und Sie können Zeilen darauf zeichnen. Sie können die Canvas -Klasse verwenden, um eine neue Canvas -Komponente zu erstellen.
Endgültige Leinwand C = Neue Canvas () {public void Paint (Grafik g) {Rechteck R = getBounds (); , R. Width -1, 0);}};Schriftarten (Schrift)
Dieser Code zeigt, wie man eine Schriftart zum Zeichnen einer Textzeichenfolge verwendet und die Schriftart des Textes festlegt. Das Grafikobjekt wird verwendet, um diese Zeichenfolge zu zeichnen.
Public void Paint (Grafik g) {G.Setfont (neue Schriftart ("Arial", font.Italic, 12); G.Drawstring ("Test", 32, 8);}
Farben
Dieser Code zeigt, wie die angegebenen rot-, grün- und blauen Werte verwendet werden, um die Farbe einer Zeile festzulegen. Das Grafikobjekt wird verwendet, um diese Zeile zu zeichnen.
Public void Paint (Grafik g) {G.SetColor (neue Farbe (255, 127, 0));Bilder
Im folgenden Code dekodierte die in Abbildung 1 gezeigte Grapefruit.jpg -Datei die Grapefruit.jpg -Datei und gab ein Cache -Bild zurück.
Bild i = null;
Abbildung 1. Grapefruit.jpg Bilddatei
Dieser Code zeigt, wie die verfügbaren Leinwand ausgedruckt wird. Mit der Lackmethode können Sie den Standardbildschirm des Druckers anpassen.
Druckerjob pj = printerjob.getPinterjob (); .
Piep
Der folgende Code zeigt die BEEP -Methode, wenn die BEEP -Methode der Toolkit -Klasse verwendet wird.
Toolkit tk = Toolkit.getDefaulttoolkit ();
Einfaches Beispiel für die Verwendung des Kopflosenmodus
Das folgende Beispiel HeadlessBasics verwendet alle im Artikel beschriebenen Funktionen.
Um dieses Beispiel auszuführen, müssen Sie Javac verwenden, um den folgenden Code zu kompilieren. Kopieren Sie die Bilddatei grapefruit.jpg in das Verzeichnis, in dem sich die Headlessbasics -Klasse befindet.
Java.awt.*; // Nennen Sie dies, bevor das Toolkit initialisiert wurde, dh // vor dem Toolkit.getDefaulttoolkit () aufgerufen wurde. Die Eigenschaft ist auch eingestellt Graphics -Umgebung ; Panel sind erlaubt. println ("Schaltfläche erstellt:" + erstellt); . und Schriftarten G.Setfont (neue Schriftart ("Arial", font. ititalic, 12); G.Drawstring ("Test", 32, 8);}; // und alle Operationen funktionieren korrekt. C.Setbounds (32, 32, 128, 128) // Bilder sind verfügbar. .PrintstackTrace (System.ERR);} endgültiges Bild im = i; (PageIndex> 0) {ret Urn druckbar.no_such_page;} ((Graphics2d) g) .Translate (PF.GetImagablex (), PF.GetImagabley ()); Malen Sie das Bild. Z) {z.printstacktrace (System.err);}}}}}}}Abbildung 2 zeigt das Druckergebnis in diesem Beispiel.
Abbildung 2. Kopflessbasics Druckausgabe.
Darüber hinaus können Sie die folgenden Informationen sehen:
Headless -Modus: Truejava.awt.headlessExceptionat Java.awt.Graphicsumvironment Java: 24) Rahmen erstellt: falsejava.head.headlessException Java.awt.Graphicsenvalonment wird erstellt: Falsch
HINWEIS: Für den Zweck der Demonstration führt der erste Code dazu, dass diese Anwendung 2 Java.awt.headlessExceptions -Anomalien wirft.
Als Ersatz für den vorherigen Weg können Sie die Standardausgabeinformationen in eine Datei einfügen und die Datei drucken. Verwenden Sie in diesem Fall die folgende Befehlszeile, um dieses Beispiel auszuführen:
Java Headlessbasics 2> Standard_output.txt
Konvertieren Sie die vorhandene Anwendung in den kopflosen Modus.
Wie konvertieren Sie die vorhandene Anwendung in den ausführbaren Kopflosenmodus? Der effektivste Weg, um diese Konvertierung durchzuführen, besteht darin, Ihren Quellcode zu analysieren, um festzustellen, dass jede Funktion vom kopflosen Modus abhängt. Mit anderen Worten, um dieselben Merkmale zu verwirklichen, müssen Sie die Klasse und Methoden finden, die die HeadlessException -Ausnahme auswerfen, und dann mit dem unabhängigen kopflosen Modus diese Klassen und Methoden ersetzen.
Sie können die Java SE 6 -API verwenden, um festzustellen, ob eine bestimmte Klasse oder Methode den kopflosen Modus unterstützt. Wenn eine bestimmte Komponente den kopflosen Modus nicht unterstützt, ist die einzige Anomalie, die Ihr Programm erfassen muss, HeadlessException. Es wird vor anderen möglichen Anomalien ausgegeben. Aus diesem Grund gibt es keine besondere Notwendigkeit, andere Anomalien im Codebeispiel dieses Abschnitts zu erfassen: Verwenden Sie den kopflosen Modus.
Sie werden auf jeden Fall die Vorteile anderer nützlicher Methoden finden, um den kopflosen Modus zu verwenden. Wir hoffen, dass dieser Artikel Ihnen helfen kann, diese Aufgabe zu erledigen und eine neue Welt auf der Java SE -Plattform zu spielen.