J'apprends l'interface graphique en Java, et pour cela j'ai créé un programme de démonstration:
import Java.awt.*;
public class FrameDemo extends Frame {
public FrameDemo(){
super("Frame Demo");
setSize(200, 200);
setVisible(true);
}
public static void main(String args[]){
new FrameDemo();
}
}
Il a été compilé avec succès. Mais quand j'ai essayé d'exécuter le programme, j'ai trouvé l'erreur suivante:
Exception in thread "main" Java.awt.HeadlessException
at Java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.Java:173)
at Java.awt.Window.<init>(Window.Java:437)
at Java.awt.Frame.<init>(Frame.Java:419)
at FrameDemo.<init>(FrameDemo.Java:4)
at FrameDemo.main(FrameDemo.Java:9)
J'utilise Xubuntu 10.10 et Java -version
donne:
Java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.5) (6b20-1.9.5-0ubuntu1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)
Que dois-je faire?
Encore une chose: c'est le même genre d'erreur que j'ai eu quand j'ai essayé d'exécuter Dr. Java et le fichier jar de HJSplit.
Ubuntu a la possibilité d'installer un sans tête Java - cela signifie sans bibliothèques graphiques. Ce n'était pas toujours le cas, mais je l'ai rencontré en essayant d'exécuter un Java éditeur de texte le 10.10 l'autre jour. Exécutez la commande suivante pour installer un JDK qui a ces bibliothèques:
Sudo apt-get install openjdk-6-jdk
EDIT: En fait, en regardant ma config, vous pourriez avoir besoin du JRE. Si tel est le cas, exécutez:
Sudo apt-get install openjdk-6-jre
J'ai cessé de recevoir cette exception lorsque j'ai installé default-jdk
en utilisant apt
. J'utilise Ubuntu 14.04 (Trusty Tahr), et le problème semble avoir été le résultat d'un "headless" Java installé. Tout ce que j'ai fait était:
Sudo apt-get install default-jdk
Dans mon cas
-Djava.awt.headless=true
a été défini (indirectement par une configuration Maven ). Je devais utiliser activement
-Djava.awt.headless=false
pour remplacer cela.
Moi aussi, j'avais OpenJDK sur ma machine Ubuntu:
$ Java -version
Java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.13.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
Remplacer OpenJDK par le HotSpot VM fonctionne très bien:
Sudo apt-get autoremove openjdk-7-jre-headless
Vérifiez vos variables d'environnement X Window à l'aide de la commande "env".
Utilisez JFrame au lieu de Frame. Et ne vous étendez pas depuis JFrame. Écrivez simplement une classe qui a une propriété JFrame nommée gui
, qui configure ce JFrame avec les méthodes disponibles, car il est préférable de le faire comme ceci. Étendre ici est faux l'utilisation de la POO.
Vérifiez la valeur de votre variable d'environnement DISPLAY. Essayez d'exécuter une application X simple à partir de la ligne de commande. Si cela fonctionne, vérifiez la valeur de DISPLAY pour la bonne valeur.
Vous pouvez tester différentes valeurs et variables d'environnement par invocation en procédant comme suit sur la ligne de commande:
DISPLAY=:0.0 <your-Java-executable-here>
Comment appelez-vous votre programme?
Je vérifierais avec un autre Java implémentation/fournisseur. De préférence Oracle/Sun Java: http://www.Java.com/en/ . Les implémentations open-source diffèrent malheureusement de façon bizarre.