Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exception in thread "main" java.lang.NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError

Sujet résolu
    30 juillet 2011 à 21:32:00

    Bonsoir,

    J'ai commencé à apprendre Java en utilisant NetBeans 7.0 . Tout allait bien tant que j'utilisais l'IDE, mais lorsque, à titre de curiosité, j'ai voulu compiler/executer mes programmes en ligne de commande (avec javac.exe/java.exe) rien ne va plus: la compilation se passe "apparamment" bien, mais lors de l'execution, l'erreur suivante est affichée: Exception in thread "main" java.lang.NoClassDefFoundError
    Voici un exemple de code:
    package console01;
    
    public class Console01
    {
    	public static void main(String[] args)
    	{
    		System.out.println("Hello Console01 !");
    
    	}
    }
    


    D:\Programming\Java\Console01\console01>javac Console01.java
    
    D:\Programming\Java\Console01\console01>java Console01
    Exception in thread "main" java.lang.NoClassDefFoundError: Console01 (wrong name
    : console01/Console01)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)


    Merci d'avance pour votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
      30 juillet 2011 à 22:51:17

      Bonsoir,

      Cette erreur veut dire que ton compilateur ne trouve pas ton fichier.
      En gros, ton IDE se positionne "automatiquement" sur le bon dossier lors de la compilation.
      Sauf que là, tu n'utilise pas d'IDE. Il faut donc se déplacer dans le dossier où se trouve ton fichier .java et le compiler.
      Si le .class généré se trouve dans le même dossier, tu n'aura qu'à l'exécuter avec un "java Console01".

      En espérant avoir aidé.
      • Partager sur Facebook
      • Partager sur Twitter
        30 juillet 2011 à 23:29:20

        Citation : JordiC

        Bonsoir,

        Cette erreur veut dire que ton compilateur ne trouve pas ton fichier.
        En gros, ton IDE se positionne "automatiquement" sur le bon dossier lors de la compilation.
        Sauf que là, tu n'utilise pas d'IDE. Il faut donc se déplacer dans le dossier où se trouve ton fichier .java et le compiler.
        Si le .class généré se trouve dans le même dossier, tu n'aura qu'à l'exécuter avec un "java Console01".

        En espérant avoir aidé.


        Merci de ta réponse :)
        Mais si tu regardes bien le post, tu verra que c'est exactement ce que j'ai fais: le .java est bien dans D:\Programming\Java\Console01\console01 , aussi, la compilation s'est bien déroulée (j'ai le .class).
        C'est lors de l'execution que ça coince... voici une autre "capture de console"
        D:\Programming\Java\Console01\console01>dir
         Le volume dans le lecteur D n’a pas de nom.
         Le numéro de série du volume est AC4A-19D7
        
         Répertoire de D:\Programming\Java\Console01\console01
        
        30/07/2011  20:09    <REP>          .
        30/07/2011  20:09    <REP>          ..
        30/07/2011  20:28               439 Console01.class
        30/07/2011  20:09               159 Console01.java
                       2 fichier(s)              598 octets
                       2 Rép(s)   2 147 262 464 octets libres
        
        D:\Programming\Java\Console01\console01>java .\Console01
        Erreur : impossible de trouver ou charger la classe principale .\Console01
        
        D:\Programming\Java\Console01\console01>java Console01
        Exception in thread "main" java.lang.NoClassDefFoundError: Console01 (wrong name
        : console01/Console01)
                at java.lang.ClassLoader.defineClass1(Native Method)
                at java.lang.ClassLoader.defineClass(Unknown Source)
                at java.security.SecureClassLoader.defineClass(Unknown Source)
                at java.net.URLClassLoader.defineClass(Unknown Source)
                at java.net.URLClassLoader.access$100(Unknown Source)
                at java.net.URLClassLoader$1.run(Unknown Source)
                at java.net.URLClassLoader$1.run(Unknown Source)
                at java.security.AccessController.doPrivileged(Native Method)
                at java.net.URLClassLoader.findClass(Unknown Source)
                at java.lang.ClassLoader.loadClass(Unknown Source)
                at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
                at java.lang.ClassLoader.loadClass(Unknown Source)
                at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
        • Partager sur Facebook
        • Partager sur Twitter
          30 juillet 2011 à 23:33:23

          Oula oui, autant pour moi.
          C'est une erreur courante, alors j'ai voulu aller vite.
          J'ai une autre remarque alors : l'import de package.. il est vraiment utile ? Ca peut venir de là je crois.
          • Partager sur Facebook
          • Partager sur Twitter
            30 juillet 2011 à 23:41:38

            Citation : JordiC

            Oula oui, autant pour moi.
            C'est une erreur courante, alors j'ai voulu aller vite.
            J'ai une autre remarque alors : l'import de package.. il est vraiment utile ? Ca peut venir de là je crois.


            En fait, j'essaye d'être un peu rigoureux en mettant le package console01; (le package ne contient que Console01.java , mais dans d'autres programmes (qui ont tout aussi bien plantés :( ), il y avait plus de .java)
            Mais il est vrai que lorsque j'enlève cette ligne, l'éxécution se passe à merveille.
            Je ne vois pas où est le mal, surtout que je pense avoir compris (à peu près :honte: ) ce dont parle le tuto d'Oracle ici: http://download.oracle.com/javase/tuto [...] ge/index.html

            [EDIT]
            N'y a-t-il aucun moyen pour que ça marche en gardant package console01; ?
            Parceque dans NetBeans (compilation et execution), il n'y a aucun problème...
            Pire encore, si je compile dans NetBeans mais que j'execute dans la console (avec java.exe), cette erreur apparait encore :(
            • Partager sur Facebook
            • Partager sur Twitter
              31 juillet 2011 à 11:19:34

              IL faut se positionner dans le dossier correspondant au package racine avant d'exécuter l'application.

              Le nom complet de ta classe est Console01.Console01. Il faut donc lancer l'application avec java Console01.Console01 et être positionné dans le dossier parent, car la VM cherche alors le fichier Console01\Console01.class.

              Si le dossier contenant Console01.class ne s'appelle pas Console01, alors tu ne pourras tout simplement pas lancer l'application.
              • Partager sur Facebook
              • Partager sur Twitter
                31 juillet 2011 à 11:58:39

                Merci QuentinC 2 ! ça a l'air de marcher ^^
                D:\Programming\Java\Console01>java console01.Console01
                Hello Console01 !

                j'ajouterai qu'il faudra lancer
                java console01.Console01
                et non pas
                java Console01.Console01
                et dans le cas general
                java nom_du_package.nomDeLaClasse_sansExtension
                à partir du dossier contenant le dossier du package

                Par contre, ça pose un autre problème: si je veu distribuer mon programme, ce n'est pas très pratique pour les utilisateurs qui doivent absolument connaitre le nom du package et celui de la classe contenant le main...
                Au risque de poster un HS dans mon propre sujet, j'aimerai bien savoir comment on fait pout pouvoir éxecuter un programme Java "simplement" (genre avec un double-clique sur un .exe sous wind0ws ;) )
                Des idées ? :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  31 juillet 2011 à 16:23:34

                  Citation

                  Par contre, ça pose un autre problème: si je veu distribuer mon programme, ce n'est pas très pratique pour les utilisateurs qui doivent absolument connaitre
                  le nom du package et celui de la classe contenant le main...


                  C'est pour cette raison que le plus souvent on distribue les applications sous forme d'archive jar

                  Citation

                  Au risque de poster un HS dans mon propre sujet, j'aimerai bien savoir comment on fait pout pouvoir éxecuter un programme Java "simplement" (genre avec
                  un double-clique sur un .exe sous wind0ws


                  Pour ça, une fois qu'on dispose d'un jar, il existe des packageurs jar -> exe. Ca ne dispense toutefois pas d'avoir la JRE installée sur le poste cible.

                  Je peux te conseiller launch4j comme packageur d'exécutables, il est pas très compliqué à utiliser et il est très bien.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 juillet 2011 à 16:26:44

                    Très bien :)
                    Merci beaucoup pour votre aide.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 janvier 2014 à 16:41:33

                      Cool! Ayant eu le même problème, grand merci pour le tuyau!!!

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 octobre 2016 à 18:54:47

                        Ce qui fait qu'il faut se repositionner à chaque fois dans le bon répertoire pour compiler ou exécuter, on a pas fini comme ça, sachant que hier ça fonctionne logiquement, et aujourd'hui ce problème

                        -
                        Edité par Umberto Emonds 19 octobre 2016 à 18:55:00

                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 avril 2017 à 15:14:22

                          Erreur : impossible de trouver ou charger la classe principale VideoCap

                          voila l'erreur que j'ai trouvé au cours de compilation, en fait tout se compile bien dans le même répertoire, et j'ai essayé avec un autre nom de classe :( mais aucun résultat. aide moi s'il vous plait, merci   

                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 juin 2018 à 2:23:25

                            Hello HaneneMbarek,

                            Désolé d'intervenir si tard.

                            Tombé sur ce problème lors d'un échange avec des jeunes je m'en suis sortis à désinstallant le JDK 1.8 que j'avais et en réinstallant le JDK 1.6

                            Espérant avoir aidé d'autres.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Exception in thread "main" java.lang.NoClassDefFoundError

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown