2011-03-17 5 views
0

Je tente de créer et d'exécuter un programme Java à partir de la ligne CMD de Windows XP, qui échoue en procédant comme suit. Quelqu'un peut-il me dire ce qui ne va pas/quoi d'autre essayer?Impossible d'exécuter le programme Java à partir de la ligne de commande Windows XP - ClassNotFoundException

 
C:\> java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode) 

C:\> mkdir c:\j\ 
C:\> cd c:\j\ 
C:\j\> notepad Test.java 

(ouvre le Bloc-notes où insérer le texte suivant et Enregistrer, puis sur Fermer.)

public class Test{ 
    public static void main(String[] args){ 
    System.out.println("hi"); 
    } 
} 

C:\j\> javac Test.java 
C:\j\> java Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test 
Caused by: java.lang.ClassNotFoundException: test 
     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) 
Could not find the main class: test. Program will exit. 

La vraie question est que lorsque je tente de déboguer un projet avec Eclipse , J'obtiens une erreur qu'il "ne pourrait pas créer la machine virtuelle de Java", et j'essaye de tester la compilation & exécutant un programme sans l'IDE d'abord pour être sûr que mon installation de JDK fonctionne.


Mise à jour: Vous avez raison que CLASSPATH est mis sur ma machine, mais je reçois encore une exception. L'exécution de la ligne proposée produit: (.) ​​

C:\j>java -cp . Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Test) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     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$000(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) 
Could not find the main class: test. Program will exit. 

Répondre

4

Il ressemble à la variable d'environnement CLASSPATH a été mis sur votre machine, et la valeur ne comprend pas le « point » traditionnel pour représenter le répertoire courant. Vous pouvez dire à Java de regarder dans le répertoire courant comme ceci:

java -cp. Test

(c'est l'espace java space dash cp espace dot space Test).

+0

Merci pour la suggestion, s'il vous plaît voir "edit1" que j'ai fait dans le message d'origine – remington123

0

Que cette commande affiche-t-elle sur l'écran?

C:\j> ls 

Si vous ne pouvez pas voir Test.class, compiler à nouveau le programme à savoir javac Test.java puis l'exécuter comme java Test

Sur modifier: -

Il est conseillé de ne pas créer des classes plus petites avec cas. Veuillez vous référer au Java coding convention. Essayez de supprimer manuellement Test.class. Recompilez le code et exécutez-le à nouveau.

+0

Non, ce clearl y n'est-ce pas - le message "mauvais nom" signifie que le fichier de classe est en train d'être trouvé. –

0

Répondez à la question 2, alors: quelque chose que vous nous montrez n'est pas un copier-coller réel. Le problème que vous rencontrez est que la casse des lettres utilisée pour nommer la classe "Test" dans la source Java et la casse que vous utilisez pour appeler la classe sur la ligne de commande ne correspondent pas. Basé sur le message d'erreur, je dirais que le code source dit "test de classe", mais vous tapez "java test" sur la ligne de commande.

+0

J'ai inclus le texte coupé et collé réel. La classe est définie le fichier ".java" comme Test avec un "T" majuscule. Le fichier ".java" est "Test.java" avec un "T" majuscule. J'ai essayé d'exécuter les deux: "java -cp.test" et "java -cp. Test" Les deux produisent le même message d'erreur. – remington123

+0

Peut-être que lorsque vous l'avez compilé, vous avez écrit javac test.java, et le fichier de classe s'appelle maintenant test.class? Windows est un PITA à cet égard. –

0

Ce n'est pas vraiment une réponse car ce n'est pas le comportement souhaité, mais ma classe a été définie (et référencée dans les commandes de ligne de commande comme "Test" avec un "T" majuscule, et je voyais un erreur d'exécution indiquant que la classe "test" avec un "t" minuscule n'a pas été trouvé Après beaucoup d'essais et d'erreurs, j'ai renommé "Test.java" en "test.java" et édité le fichier source pour définir le class "test" au lieu de "Test" Après cela, j'ai recompilé et lancé le programme avec la commande en ligne de commande: "java test" Maintenant ça marche L'installation de Java avec laquelle je travaille ne permet apparemment pas les classes dont les noms commencent par des lettres majuscules ...?

Questions connexes