2013-07-23 2 views
0

J'essaie d'apprendre à exécuter des applications Java à partir de la ligne de commande Windows et je n'arrive pas à résoudre un problème.NoClassDeffFoundError lors de l'exécution de java.exe à partir d'un répertoire différent de celui des fichiers .class

J'ai une classe simple sur mon bureau:

public class Hello{ 
    public static void main(String[] args){ 
     System.out.println("1, two, three"); 
    } 
} 

Si je lance javac et java commandes quand je suis dans mon répertoire de bureau dans tout ce cmd est bien, mais si je vais un répertoire de retour (donc Je ne serai pas dans le même répertoire que les fichiers .java et .class) alors mon répertoire cmd est C:\Users\Tomas et mes fichiers Hello.java et Hello.class sont en C:\Users\Tomas\Desktop. Je peux exécuter la commande javac Desktop\Hello.java et cela fonctionne, mais si j'essaie de faire java Desktop\Hello.java, j'obtiens un Exception in thread "main" java.lang.NoClassDefFoundError: Desktop\Hello (wrong name: Hello).

Je sais que NoClassDefFoundError est lancé quand une classe était disponible au moment de la compilation, mais ClassLoader ne peut pas le trouver pendant l'exécution (trouvé un bon article à ce sujet here). Je pense que le problème a quelque chose à voir avec la variable CLASSPATH, donc je l'ai mis à:

"C:\Program Files\Java\jdk1.7.0_21\jre\lib\ext";.;"C:\Program Files\Java\jdk1.7.0_21\jre\bin";"C:\Users\Tomas\Desktop" 

(I inclus "C: \ Users \ Tomas \ Desktop" juste pour essayer tout) et moi avons essayé en cours d'exécution la commande "java" avec des options de -classpath et -CP:

java -classpath "C:\Program Files\Java\jdk1.7.0_21\jre\lib\ext";.;"C:\Program Files\Java\jdk1.7.0_21\jre\bin";"C:\Users\Tomas\Desktop" Desktop\Hello 

et je continue à obtenir la même exception. Je serais ravi si quelqu'un pouvait expliquer mon erreur et pourquoi cela se produisait, et peut-être même indiquer quelques directions pour en savoir plus à ce sujet.

Merci.

+0

Lorsque vous l'avez exporté, en avez-vous fait un pot exécutable? – KeirDavis

+0

Je viens de l'écrire avec le bloc-notes et essayer de l'exécuter à partir de l'invite de commande – Tomas

+0

Tomas, Essayez et obtenez un IDE. Eclipse.org en a. Ils aident dans la tâche de faire Jars et syntaxe de codage =) J'espère que cela aide :) – KeirDavis

Répondre

1

classe

package Desktop; 

public class Hello{ 
    public static void main(String[] args){ 
     System.out.println("1, two, three"); 
    } 
} 

compilation (ici Desktop signifie répertoire windows standart)

javac Desktop\Hello.java 

exécuter (ici Desktop signifie package. Desktop/Hello est nom complet de classe)

java Desktop/Hello 
+0

Si vous êtes un répertoire de 'Desktop', alors le fichier' Hello.class' ne sera pas dans le classpath lorsque vous exécuterez la commande java execute. Ou le sera-t-il? –

+0

Désolé, mais je reçois toujours la même exception – Tomas

+0

@Tomas réponse est éditée.Back-slash doit être utilisé – Ilya

0
java -classpath 'C:\Users\Tomas\Desktop\Hello.class' 

Doit l'exécuter.

0

Essayez java -classpath "C: \ Program Files \ Java \ jdk1.7.0_21 \ jre \ lib \ ext";.; "C: \ Program Files \ Java \ jdk1.7.0_21 \ jre \ bin"; "C: \ Users \ Tomas \ Desktop" Bonjour

J'ai seulement supprimé Desktop de votre nom de classe.

+0

Toujours la même exception – Tomas

Questions connexes