filemro3b
Messages postés5Date d'inscriptionvendredi 6 mars 2009StatutMembreDernière intervention 7 mars 2009
-
6 mars 2009 à 10:55
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
8 mars 2009 à 10:30
bonjour tout le monde
je suis newbie au java et j aimerai bien que vous m'aidiez concernant ce ci :
j ai compilé et exécuté avec succès un simple programme de type helloworld sans interface graphique :)
mais avec un autre mini progrmme qui utilise SWING ça a compilé mais a géneré une erreur qui est la suivante :
java.lang.NoClassDefFoundError: HelloWorldSwing (wrong name: start/HelloWorldSwing)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: HelloWorldSwing. Program will exit.
Exception in thread "main" j ai essayé de mettre ceci dans le system environment JAVA_HOME C:\Program Files\Java\jdk1.6.0_12\bin mais ca n'a rien changé j ai essaye avec JAVA_HOME "C:\Program Files\Java\jdk1.6.0_12\bin" encore rien et même chose avec classpath = C:\Program Files\Java\jdk1.6.0_12\bin .
j ai utilisé l option -classpath avec la commande java mais nada !!!!
aidez moiiiiii !!!!!!!!!
A voir également:
Please remove or make sure it appears in the correct subdirectory of the classpath.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 6 mars 2009 à 14:53
Salut,
C'est normal pour le $ : il s'agit de la compilation de ta classe anonyme new Runnable : java crée autant de fichier .class qu'il y a de classes dans ton projet. Si tu crée une classe interne anonyme, il va créer deux fichier .class : le premier du nom de ta classe, le deuxième : nomdetaclasse$1.class
Je n'ai jamais compilé en ligne de commande plus d'une classe, donc je ne pourrais pas t'aider plus, mais essaye en enlever ton thread pour voir ce que ca donne (ce n'est pas conseillé pour que SWING soit rapide, je sais bien) :
import javax.swing.*;
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
______________________________________
DarK Sidious
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 6 mars 2009 à 12:46
Salut,
Montre nous aussi la ligne de commande de compilation (si jamais tu compile en ligne de commande). Là apparemment, c'est qu'il ne trouve pas la classe HelloWorldSwing du package start
______________________________________
DarK Sidious
filemro3b
Messages postés5Date d'inscriptionvendredi 6 mars 2009StatutMembreDernière intervention 7 mars 2009 6 mars 2009 à 14:39
salut
en ligne de cmd je fais tout simplement
javac HelloWorldSwing.java et ca compile sans probleme mais ce que je ne comprends pas c'est que ca crée un HelloWorldSwing$1.class et aussi un HelloWorldSwing.class
ce koi ce dollarrrrrrrrr !!!!
le fichier java a été telechargé de java.sun
et voila code source
*/
import javax.swing.*;
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 8 mars 2009 à 10:30
Salut,
Ok donc si ca marche, c'est qu'il ne trouve pas la classe interne anonyme, donc un problème de classpath justement. Par contre, comme je te l'ai dit, je ne sais pas comment y remédier vu que j'ai jamais utilisé la ligne de commande pour compiler puis exécuter un code : je fais toujours un jar pour pouvoir lancer mes programmes, et ca fait belle lurette que j'utilise eclipse maintenant pour faire cà.
Pour le conseil sur la rapidité, ben... SWING a plusieurs thread, et il ne faut pas faire d'opération lourde dans le thread principal qui est le thread d'affichage. Du coup, dès que tu crées des composants SWING, ou que tu fais un traîtement sur un événement, etc, il faudrait toujours le faire exécuter par un thread différent du thread principal (en crée un donc), comme le code que tu avais fait à l'origine.
______________________________________
DarK Sidious