Classpath

Résolu
filemro3b
Messages postés
5
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
7 mars 2009
- 6 mars 2009 à 10:55
cs_DARKSIDIOUS
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Membre
Derniè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  !!!!!!!!!    

5 réponses

cs_DARKSIDIOUS
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Membre
Dernière intervention
4 mars 2013
131
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
3
cs_DARKSIDIOUS
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Membre
Dernière intervention
4 mars 2013
131
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
0
filemro3b
Messages postés
5
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Derniè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();
            }
        });
    }
}

merci pour tout    
0
filemro3b
Messages postés
5
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
7 mars 2009

7 mars 2009 à 09:22
salut tout le monde


baaaa !!

ça a marché

et sans problemes

avec l'omission de la runnable !

 bravo !! et je te remercie bien !!

j aimerais bien que tu m'éclaire la lanterne concernant le conseil que swing soit rapide ou non !

je te remercie encore :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Membre
Dernière intervention
4 mars 2013
131
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
0