Cet article présente comment utiliser le mode sans tête sur la plate-forme Java (Java SE standard, également connue sous le nom de plate-forme J2SE).
Le mode sans tête est une configuration système lorsque l'affichage, le clavier ou la souris manque. Cela semble incroyable, mais en fait, vous pouvez effectuer différentes opérations dans ce mode, même avec des données graphiques.
Où puis-je utiliser ce modèle? Pensez à votre application générant constamment une image. Lors de la création d'images, vous devez appliquer ni l'affichage ni le clavier. Supposons que votre application dispose désormais d'une architecture principale ou d'un serveur propriétaire, mais ce service n'a pas d'affichage, de clavier ou de souris. La décision idéale est d'utiliser un grand nombre de puissance de calcul visuel au lieu de caractéristiques non visuelles. L'image générée en mode sans tête peut être transmise au système Headful pour un rendu plus profond.
Il existe de nombreuses méthodes dans la classe Java.awt.Toolkit et Java.awt.GraphicSenvironment. Mais certaines catégories, telles que toile et panneau, peuvent être exécutées en mode sans tête. Après la plate-forme J2SE 1.4, il prend en charge le mode sans tête.
Remarque: Cet article se concentre sur le document de la version de la plate-forme Java SE6. Toute API ou d'autres plates-formes Java SE améliorées sont examinées et approuvées par le groupe d'experts JSR270 (JSR 270 Expert Group.).
Boîte à outils
La classe Java.awt.Toolkit est une classe parentale abstraite de la boîte à outils de fenêtre abstraite (AWT). Les sous-classes de la boîte à outils sont utilisées pour lier divers composants AWT à une boîte à outils locale spécifique.
De nombreux composants seront affectés si l'appareil, le clavier ou la souris ne sont pas pris en charge. Un constructeur approprié devrait lancer une exception sans headlessException:
Ce composant poids lourd nécessite une fonction graphique de niveau pair -to-peer pour la soutenir.
Les composants liés à la toile, au panneau et aux composants de l'image n'ont pas besoin de lancer les anomalies de HeadlessException, car ces composants peuvent utiliser des fonctions vides au niveau du système de fonctionnement, puis traitées comme composants légers.
La boîte à outils de Headless lie également les composants Java aux ressources locales, mais il ne le fera que lorsque la ressource n'inclut pas les périphériques d'affichage ou les périphériques d'entrée.
Environnement graphique
La classe java.awt.graphicsenvalonment est une classe abstraite qui décrit une collection d'objets GraphicsDevice et d'objets de police qui peuvent être utilisés dans la technologie Java dans une plate-forme donnée. Les ressources du GraphicsSenValonment peuvent être des équipements locaux ou à long terme. L'objet GraphicsDevice peut être un cache d'affichage, d'imprimante ou de graphisme, et ils sont le but de la fonction de dessin Graphics2D. Chaque GraphicsDevice dispose de nombreux objets GraphicsConfiguration qui lui sont liés. Ces objets spécifient différents environnements de configuration et GraphicsDevice peut être utilisé dans ces environnements de configuration.
Le tableau 1 montre la méthode GraphicsSenValonment, vérifiez la prise en charge du mode sans tête
Tableau 1. Méthode de mode sans tête
Remarque: Isheadless () Méthode vérifie les attributs système spécifiques, java.awt.headless au lieu de la configuration matérielle du système.
Le code lancé par HeadlessException dépend de l'affichage, du clavier et de la souris en tant qu'environnement qui ne prend en charge aucun d'entre eux.
Définir le mode sans tête
Utilisez le mode sans tête pour fonctionner, vous devez d'abord comprendre comment vérifier et définir les attributs système en ce qui concerne cela. De plus, vous devez comprendre comment créer une classe d'implémentation sans tête pour utiliser une barre d'outils.
Configuration d'attribut système
Afin d'activer le mode sans tête, vous devez utiliser la méthode setProperty () pour définir les attributs système correspondants. Cette méthode vous permet de définir l'attribut système avec la valeur attendue.
System.SetProperty ("java.awt.headless", "true");Dans le code ci-dessus, java.awt.headless est un attribut système, et vrai est la valeur que nous définissons.
Si vous souhaitez utiliser l'environnement sans tête et traditionnel dans l'un des mêmes programmes, vous pouvez utiliser la ligne de commande suivante pour terminer:
java -djava.awt.headless = true
Créez la boîte à outils par défaut
Si les attributs système du nom de Java.awt.headless sont définis sur true, la boîte à outils sans tête sera utilisée. Ensuite, utilisez la méthode getDefaultToolkit () pour créer une instance d'un outil sans tête:
Toolkit tk = toolkit.getDefaultToolkit ();
Vérification du mode sans tête
Pour vérifier la convivialité du mode de tête, utilisez la méthode Isheadless () de la classe GraphicsSenvironment ::
GraphicsSenvironment ge = graphicsenvironment.getLocalGraphicSenvironment (); Boolean Headless_check = ge.isheadless ();
Cette méthode vérifie les attributs du système Java.awt.headless. Si cet attribut a une valeur de vrai, il lancera une expression de HeadlessException à partir d'une boîte à outils et une dépendance à un écran, un clavier et une classe GraphicsSenvalonment.
Fonctionnement en mode sans tête
Après avoir configuré le mode sans tête et créé une instance de la boîte à outils sans tête, votre application peut effectuer les opérations suivantes:
Toile (toile)
Le code suivant dessinera une zone rectangulaire vierge à l'écran, et vous pouvez tracer des lignes dessus. Vous pouvez utiliser la classe Canvas pour créer un nouveau composant Canvas.
Canvas final c = nouveau canvas () {public void peinture (graphiques g) {rectangle r = getBounds (); g.Drawline (0, 0, r.height -1); , R.Width -1, 0);}};Polices (police)
Ce code montre comment utiliser la police pour dessiner une chaîne de texte et définir la police du texte. L'objet graphique est utilisé pour dessiner cette chaîne.
Public void peinture (graphiques g) {g.setfont (new Font ("Arial", Font.italic, 12); g.drawstring ("test", 32, 8);}
Couleurs
Ce code montre comment utiliser les valeurs rouges, vertes et bleues spécifiées pour définir la couleur d'une ligne. L'objet graphique est utilisé pour tracer cette ligne.
Peinture publique (graphiques G) {g.setColor (nouvelle couleur (255, 127, 0));Images
Dans le code suivant, la méthode read () de la classe javax.imageio.imageio a décodé le fichier de raisin.jpg illustré à la figure 1 et a renvoyé une image de cache.
Image i = null; essayez {file f = new File ("Grapefruit.jpg");Figure 1. fichier image de gramponfruit.jpg
Imprimer
Ce code montre comment imprimer le canevas disponible, vous pouvez utiliser la méthode de peinture pour personnaliser l'écran par défaut de l'imprimante.
PRINTERJOB PJ = PRINTERJOB.GETPRIRERJOB (); ) .Translate (pf.getImagablex (), pf.getImagabley ());
Bip
Le code suivant montre la méthode du bip si la méthode du bip de la classe Toolkit est utilisée.
Toolkit tk = toolkit.getDefaultToolkit ();
Exemple simple d'utilisation du mode sans tête
L'exemple de basiques sans tête suivant utilise toutes les fonctions décrites dans l'article.
Pour exécuter cet exemple, vous devez utiliser Javac pour compiler le code suivant. Copiez le fichier d'image de gramplefruit.jpg dans le répertoire où se trouve la classe sans headlessbasics.
Importation java.awt.; // Appelle cela avant que la boîte à outils ne soit initialisée, c'est-à-dire avant que Toolkit.getDefaultToolkit () ait été appelée. La propriété est définie, ce // sera également un bip standard. GraphicsSenviron.GetLocalGraphicsVirorOronment (); ; Le panneau est autorisé. Println ("Le bouton est créé:" + Créé); .HEight -1); // Les couleurs fonctionnent également. et polices g.setfont (new Font ("Arial", Font.italic, 12); g.drawstring ("test", 32, 8);}; // et toutes les opérations fonctionnent correctement. C.SetBounds (32, 32, 128, 128); .PrintStackTrace (System.err);} Image finale IM = I; (PageIndex> 0) {RET Urn imprimable.no_such_page;} ((Graphics2d) g) .Translate (pf.getImagablex (), pf.getImagabley (); peindre l'image. Z) {z.printStackTrace (System.err);}}}}}}}La figure 2 montre le résultat de l'impression dans cet exemple.
Figure 2. Sortie imprimée sans headlessbasics.
De plus, vous pouvez voir les informations suivantes:
Mode sans tête: Truejava.awt.headsExceptionat Java.awt.Graphicsenvironment.Chekheadless (source inconnue) sur Java.awt.Window. Java: 24) Frame est créée: Falsejava.head.headshesException java.awt.graphicsenvalonment.checkheadless (source inconnue) t java.awt.button. est créé: faux
Remarque: Aux fins de la démonstration, le code initial fera que cette application lancera 2 java.awt.headlessExceptions anomalies.
Pour substituer à la manière précédente, vous pouvez mettre les informations de sortie standard dans un fichier et imprimer le fichier. Dans ce cas, utilisez la ligne de commande suivante pour exécuter cet exemple:
java headlessbasics 2> standard_output.txt
Convertissez l'application existante en mode sans tête.
Comment convertir l'application existante en mode exécutable sans tête? Le moyen le plus efficace d'exécuter cette conversion consiste à analyser votre code source pour déterminer que toute fonction dépend du mode sans tête. En d'autres termes, pour réaliser les mêmes fonctionnalités, vous devez trouver la classe et les méthodes qui lèveront l'exception de HeadlessException, puis utiliser le mode indépendant sans tête pour remplacer ces classes et méthodes.
Vous pouvez utiliser l'API Java SE 6 pour expliquer pour déterminer si une classe ou une méthode spécifique prend en charge le mode sans tête. Si un composant spécifique ne prend pas en charge le mode sans tête, la seule anomalie que votre programme doit capturer est HeadlessException. Il est jeté avant d'autres anomalies possibles. C'est pourquoi il n'y a pas de nécessité particulière pour capturer d'autres anomalies dans l'exemple de code de cette section: utilisez le mode sans tête ".
Vous trouverez certainement les avantages d'autres méthodes utiles pour utiliser le mode sans tête. Nous espérons que cet article pourra vous aider à accomplir cette tâche et à jouer un nouveau monde sur la plate-forme Java SE.