Erreur dans les applis graphiques

Erreur dans les applis graphiques - Java - Programmation

Marsh Posté le 06-10-2002 à 12:35:17    

Salut,
 
Je suis entrain de découvrir le java sous linux et j'ai un petit problème lorsque je tente de faire des applis toutes connes graphiques.  
 
ex bateau :
 
 

Code :
  1. public class HelloJavaSimple {
  2. public static void main(String[] args) {
  3.  javax.swing.JOptionPane.showMessageDialog(null, "Hello java!" );
  4. }
  5. }

 
 
 Me retourne :
 
./java HelloJavaSimple  
Exception in thread "main" java.lang.NoClassDefFoundError
 
Je précise que la compilation avec javac ne me donne aucune erreur et que l'exemple sort tout droit d'un bouquin.
 
Voilà, je suis un peu paumé :D
 
CHaiCA


Message édité par chaica le 06-10-2002 à 12:35:34
Reply

Marsh Posté le 06-10-2002 à 12:35:17   

Reply

Marsh Posté le 06-10-2002 à 13:35:58    

ton classpath n'est pas correct.
 
met toi dans le rep où il y a le .class et tape

./java -classpath . HelloJavaSimple

Reply

Marsh Posté le 06-10-2002 à 13:50:42    

Ben si il est correct.
 
 

Code :
  1. chaica@debian:/j2sdk1.4.1/bin$ ls
  2. ControlPanel                extcheck        javah         policytool
  3. HelloJava1.class            hellojava.java  javap         rmic
  4. HelloJava1.java             idlj            jdb           rmid
  5. HelloJavaCommandLine.class  jar             keytool       rmiregistry
  6. HelloJavaCommandLine.java   jarsigner       kinit         serialver
  7. HelloJavaSimple.class       java            klist         servertool
  8. HelloJavaSimple.java        java-rmi.cgi    ktab          tnameserv
  9. HtmlConverter               javac           native2ascii
  10. appletviewer                javadoc         orbd

 
 
Et donc après :
 
 

Code :
  1. chaica@debian:/j2sdk1.4.1/bin$ ./java -classpath . HelloJavaSimple
  2. Exception in thread "main" java.lang.NoClassDefFoundError
  3.         at java.lang.Class.forName0(Native Method)
  4.         at java.lang.Class.forName(Class.java:140)
  5.         at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
  6.         at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:72)
  7.         at java.lang.Class.forName0(Native Method)
  8.         at java.lang.Class.forName(Class.java:140)
  9.         at java.awt.Toolkit$2.run(Toolkit.java:712)
  10.         at java.security.AccessController.doPrivileged(Native Method)
  11.         at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:703)
  12.         at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
  13.         at javax.swing.LookAndFeel$1.createValue(LookAndFeel.java:274)
  14.         at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:181)
  15.         at javax.swing.UIDefaults.get(UIDefaults.java:126)
  16.         at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
  17.         at javax.swing.UIDefaults.getIcon(UIDefaults.java:407)
  18.         at javax.swing.UIManager.getIcon(UIManager.java:537)
  19.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIconForType(BasicOptionPaneUI.java:557)
  20.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIcon(BasicOptionPaneUI.java:543)
  21.         at javax.swing.plaf.basic.BasicOptionPaneUI.createMessageArea(BasicOptionPaneUI.java:313)
  22.         at javax.swing.plaf.basic.BasicOptionPaneUI.installComponents(BasicOptionPaneUI.java:154)
  23.         at javax.swing.plaf.basic.BasicOptionPaneUI.installUI(BasicOptionPaneUI.java:122)
  24.         at javax.swing.JComponent.setUI(JComponent.java:449)
  25.         at javax.swing.JOptionPane.setUI(JOptionPane.java:1675)
  26.         at javax.swing.JOptionPane.updateUI(JOptionPane.java:1697)
  27.         at javax.swing.JOptionPane.<init>(JOptionPane.java:1660)
  28.         at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:810)
  29.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:624)
  30.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:595)
  31.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:566)
  32.         at HelloJavaSimple.main(HelloJavaSimple.java:3)

 
 
Voila. Toujours aussi paumé. Par contre je précise que si je fais un prog qui ne marche qu'en ligne de commande ca marche mais dès que c'est graphique ca foire.
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 14:12:41    

chaica a écrit a écrit :

Ben si il est correct.




 
c'est cela oui. Déjà tu crois que mettre tes classes dans le rép bin va aider?  :eek2:  
 
Fais comme Benou t'a dit


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 14:16:24    

DarkLord: Excuse moi mais va falloir être plus précis.
 
Mon HelloJavaSimple.class est dans mon rep bin/ comme le montre mon  ls.
 
Si je suis dans bin/ et que je tape ./java -classpath . HelloJavaSimple il recherche dans . cad bin/ donc où est le problème?
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 14:17:40    

bin c'est bien ce que je te reproche !!! :)
 
Tes classes sources et compilées n'ont rien à faire dans le répertoire bin ...  
 
Cela dit, si ca ne fonctionne toujours pas avec la manip que Benou t'as donné je suis perplexe ... J'ai vu que tu as JDK 1.4 donc normallement  ca doit etre bon


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 14:18:18    

tu as un serveur X de démarré lorsque tu fais cette manip?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 14:28:50    

Ben oui. Mon serveur X tourne en ce moment même.
 
Et pour vous faire plaisir j'ai changé de paths mes fichiers donc maintenant je tape
 

Code :
  1. ./java -classpath ~/java/ HelloJavaSimple

 
 
Mais je me fais toujours bouler avec :
 

Code :
  1. chaica@debian:/j2sdk1.4.1/bin$ ./java -classpath ~/java/ HelloJavaSimple
  2. Exception in thread "main" java.lang.NoClassDefFoundError
  3.         at java.lang.Class.forName0(Native Method)
  4.         at java.lang.Class.forName(Class.java:140)
  5.         at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
  6.         at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:72)
  7.         at java.lang.Class.forName0(Native Method)
  8.         at java.lang.Class.forName(Class.java:140)
  9.         at java.awt.Toolkit$2.run(Toolkit.java:712)
  10.         at java.security.AccessController.doPrivileged(Native Method)
  11.         at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:703)
  12.         at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
  13.         at javax.swing.LookAndFeel$1.createValue(LookAndFeel.java:274)
  14.         at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:181)
  15.         at javax.swing.UIDefaults.get(UIDefaults.java:126)
  16.         at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
  17.         at javax.swing.UIDefaults.getIcon(UIDefaults.java:407)
  18.         at javax.swing.UIManager.getIcon(UIManager.java:537)
  19.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIconForType(BasicOptionPaneUI.java:557)
  20.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIcon(BasicOptionPaneUI.java:543)
  21.         at javax.swing.plaf.basic.BasicOptionPaneUI.createMessageArea(BasicOptionPaneUI.java:313)
  22.         at javax.swing.plaf.basic.BasicOptionPaneUI.installComponents(BasicOptionPaneUI.java:154)
  23.         at javax.swing.plaf.basic.BasicOptionPaneUI.installUI(BasicOptionPaneUI.java:122)
  24.         at javax.swing.JComponent.setUI(JComponent.java:449)
  25.         at javax.swing.JOptionPane.setUI(JOptionPane.java:1675)
  26.         at javax.swing.JOptionPane.updateUI(JOptionPane.java:1697)
  27.         at javax.swing.JOptionPane.<init>(JOptionPane.java:1660)
  28.         at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:810)
  29.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:624)
  30.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:595)
  31.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:566)
  32.         at HelloJavaSimple.main(HelloJavaSimple.java:3)

 
 
Ca doit être tout con mais je me demande qu'est ce que j'oublie.  
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 14:34:07    

essaye de faire ca ./java -classpath .:$CLASSPATH HelloJavaSimple
 
edit : en fait je pense tout simplement que java ne trouve pas le fichier rt.jar (qui est ds jre/lib sous windows en tt cas )
ajoute le a ton classpath...


Message édité par veryfree le 06-10-2002 à 14:41:41
Reply

Marsh Posté le 06-10-2002 à 14:56:12    

veryfree : Comment je fais pour l'ajouter à mon classpath?  
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 14:56:12   

Reply

Marsh Posté le 06-10-2002 à 15:01:46    

veryfree a écrit a écrit :

essaye de faire ca ./java -classpath .:$CLASSPATH HelloJavaSimple
 
edit : en fait je pense tout simplement que java ne trouve pas le fichier rt.jar (qui est ds jre/lib sous windows en tt cas )
ajoute le a ton classpath...




 
si il y est. Si il n'y était pas tu n'aurais pas la stack trace du JOptionPane...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 15:04:42    

bon j'ai testé ton code et il fonctionne ...
 
Fait qd meme un  

Code :
  1. java -version


 
tu as un peut etre un vieux JDK installé sur ta machine


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 15:09:23    

Bon récapitulons.
 
Mon HelloJavaSimple.java compile sans problèmes.
 
Je stock mes fichiers dans ~/java/
 
Mon fichier java est dans /j2sdk1.4/bin/
 
je tape donc :
 
 

Code :
  1. chaica@debian:/j2sdk1.4.1/bin$ ./java -classpath ~/java/ HelloJavaSimple

 
 
Et ca m'envoie chier avec :
 
 

Code :
  1. chaica@debian:/j2sdk1.4.1/bin$ ./java -classpath ~/java/ HelloJavaSimple
  2. Exception in thread "main" java.lang.NoClassDefFoundError
  3.         at java.lang.Class.forName0(Native Method)
  4.         at java.lang.Class.forName(Class.java:140)
  5.         at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
  6.         at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:72)
  7.         at java.lang.Class.forName0(Native Method)
  8.         at java.lang.Class.forName(Class.java:140)
  9.         at java.awt.Toolkit$2.run(Toolkit.java:712)
  10.         at java.security.AccessController.doPrivileged(Native Method)
  11.         at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:703)
  12.         at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
  13.         at javax.swing.LookAndFeel$1.createValue(LookAndFeel.java:274)
  14.         at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:181)
  15.         at javax.swing.UIDefaults.get(UIDefaults.java:126)
  16.         at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
  17.         at javax.swing.UIDefaults.getIcon(UIDefaults.java:407)
  18.         at javax.swing.UIManager.getIcon(UIManager.java:537)
  19.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIconForType(BasicOptionPaneUI.java:557)
  20.         at javax.swing.plaf.basic.BasicOptionPaneUI.getIcon(BasicOptionPaneUI.java:543)
  21.         at javax.swing.plaf.basic.BasicOptionPaneUI.createMessageArea(BasicOptionPaneUI.java:313)
  22.         at javax.swing.plaf.basic.BasicOptionPaneUI.installComponents(BasicOptionPaneUI.java:154)
  23.         at javax.swing.plaf.basic.BasicOptionPaneUI.installUI(BasicOptionPaneUI.java:122)
  24.         at javax.swing.JComponent.setUI(JComponent.java:449)
  25.         at javax.swing.JOptionPane.setUI(JOptionPane.java:1675)
  26.         at javax.swing.JOptionPane.updateUI(JOptionPane.java:1697)
  27.         at javax.swing.JOptionPane.<init>(JOptionPane.java:1660)
  28.         at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:810)
  29.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:624)
  30.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:595)
  31.         at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:566)
  32.         at HelloJavaSimple.main(HelloJavaSimple.java:3)

 
 
Voila. En espérant que quelqu'un voit le problème. Ca me ferait chier de demander ça à mon prof lundi :D (surtout que rien ne dit qu'il sache le résoudre lalalala)
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 15:12:20    

lance la JVM en mode verbose pour voir ce qu'elle fous (-v)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 15:25:08    

chaica@debian:/j2sdk1.4.1/jre/bin$  ./java_vm  
java_vm process: could not find Java VM symbols
 
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 15:31:25    

chaica a écrit a écrit :

chaica@debian:/j2sdk1.4.1/jre/bin$  ./java_vm  
java_vm process: could not find Java VM symbols
 
 
CHaiCA




 
c'est java -v tonProg qu il fallait faire ....

Reply

Marsh Posté le 06-10-2002 à 15:43:25    

Je viens de le faire et il n'y a rien de flagrant. Il ne fait que des loaded et signale une erreur suivant ce que j'ai déja affiché plus haut dans le post.
 
CHaiCA

Reply

Marsh Posté le 06-10-2002 à 16:05:27    

Mais ca n'a rien à voir avec un mauvais positionnement  du fichier .class de toute facon puisque j'ai un programme en ligne de commande qui marche très bien.
 
C'est l'appel aux librairies graphiques qui semble bloquer le programme.
 
CHaiCA


Message édité par chaica le 06-10-2002 à 16:07:55
Reply

Marsh Posté le 06-10-2002 à 16:59:33    

bin vi j'avais bien compris. Mmmm je démarre mon serveur redhat tout à l'heure et je testerai ton code ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-10-2002 à 17:10:38    

Ce serait cool merci.
 
CHaiCA

Reply

Marsh Posté le 07-10-2002 à 10:11:44    

Essaie déjà, en tout premier lieu, de savoir quel exécutable java tu utilises!!
 
en faisant :  
 
which java
 
Parce que dans les distribs Linux, il y a souvent Kaffee par défaut, une implémentation GNU de Java...qui marche pas!!
 
Donc, première chose à faire, vérifier que tu utilises bien le binaire du jdk, le mieux, c'est d'ajouter ../jdk.../bin à ton PATH (tu édites ton .bashrc, ou ton .profile, ou carrément /etc/profile)
 
Après, il faut que tu crées une variable d'environnement JAVA_HOME, qui pointe vers la racine de ton install JDK (chez moi : /usr/local/jdk)  
 
Ensuite,  si tu utilises le bon binaire, le rt.jar est normalement par défaut adns ton classpath....
 
Mais bon, sinon, Dark a raison, aller mettre des .java et des .class dans $JAVA_HOME/bin, ça n'a aucun sens, mais si tu te démerdes bien, tu devrais pouvoir mettre tes sources et tes classes où tu veux sans aucune contrainte, et ça marchera, pour peu que tout soit bien configuré!

Reply

Marsh Posté le 07-10-2002 à 10:47:47    

Ca plante dans cette fonction du JDK :

Code :
  1. public static synchronized GraphicsEnvironment getLocalGraphicsEnvironment() {
  2.   if (localEnv == null) {
  3.     String nm = (String) java.security.AccessController.doPrivileged
  4. (new sun.security.action.GetPropertyAction
  5.  ("java.awt.graphicsenv", null));
  6.     try {
  7.       localEnv =
  8.     (GraphicsEnvironment) Class.forName(nm).newInstance();
  9.       if (isHeadless()) {
  10.         localEnv = new HeadlessGraphicsEnvironment(localEnv);
  11.       }
  12.     } catch (ClassNotFoundException e) {
  13.       throw new Error("Could not find class: "+nm);
  14.     } catch (InstantiationException e) {
  15.       throw new Error("Could not instantiate Graphics Environment: "
  16.                       + nm);
  17.     } catch (IllegalAccessException e) {
  18.       throw new Error ("Could not access Graphics Environment: "
  19.                        + nm);
  20.     }
  21.   }
  22.   return localEnv;
  23. }


 
Ca me parait assez clair : le JAR qui permet à la JVM d'utiliser le serveur X n'est pas dans ton CLASSPATH.
Malheureusement, je travaille sur plate-forme Wintel, donc je ne pourrai pas te dire lequel. Mais si tu pouvais poster le contenu de ton CLASSPATH, cela permettrait peut-être aux UNIXiens ici présents de te dire ce qui manque...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed