Java-Klasse, die Ausführung problem: java.lang.ClassNotFoundException
Unten ist, was ich versucht habe in einem linux-terminal: zusammengestellt Test.java führen Test.class und bekam eine Fehlermeldung. Dann habe ich versucht, den gleichen Befehl mit "-classpath . " - option und "-cp . " - option, aber auch nicht.
/testpackage$ cat Test.java
package testpackage;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//TODO Auto-generated method stub
System.out.println("May I take your order?");
}
}
/testpackage$ javac Test.java
/testpackage$ java testpackage.Test
Exception in thread "main" java.lang.NoClassDefFoundError: testpackage/Test
Caused by: java.lang.ClassNotFoundException: testpackage.Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$ java -cp . testpackage.Test
Exception in thread "main" java.lang.NoClassDefFoundError: testpackage/Test
Caused by: java.lang.ClassNotFoundException: testpackage.Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$ java -classpath . testpackage.Test
Exception in thread "main" java.lang.NoClassDefFoundError: testpackage/Test
Caused by: java.lang.ClassNotFoundException: testpackage.Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: testpackage.Test. Program will exit.
/testpackage$
Aber wenn ich das Paket entfernen "testpackage" und kompilieren Sie den source-code, der entstehende class-Datei wird ausgeführt.
/testpackage$ cat Test.java
//package testpackage;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//TODO Auto-generated method stub
System.out.println("May I take your order?");
}
}
/testpackage$ javac Test.java
/testpackage$ java Test
May I take your order?
/testpackage$
Was ist falsch an meinem code oder Befehl? Bitte helfen Sie mir.
Danke. 🙂
InformationsquelleAutor sky | 2011-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zum ausführen der Befehle aus ein Verzeichnis höher.
Einer Klasse im Paket
foo
Leben müssen, die Sie im Verzeichnisfoo
. Paketfoo.bar
muss im Verzeichnisfoo/bar
und so weiter.So, Ihre Struktur sollte eine Datei namens
/path/to/code/testpackage/Test.java
und Ihr Arbeitsverzeichnis sollte/path/to/code
. Sie können dann:javac testpackage/Test.java
java -cp . testpackage.Test
und alles sollte funktionieren.
Ich habe den gleichen Fehler mit oder ohne, dies zu tun. o_O
Ok, anscheinend habe ich erlebt, wie eine Anomalie. Nach dem entfernen aller *.die class-Dateien, die es von vor der Umwandlung in ein Paket, dann versuchen Sie es erneut, es funktioniert. Etwas stolperte javac.
Würde die downvoter kümmern zu erwähnen, was Sie nicht einverstanden mit dieser Antwort?
+1 für die korrekte ans 🙂
InformationsquelleAutor Cameron Skinner
Wenn Sie einen package-Namen, der vollständig aufgelöste Klasse name
testpackage.Test
. Das ist, was java.exe zu sehen erwartet.InformationsquelleAutor duffymo
Kann man nicht arbeiten mit "testpackage" als das aktuelle Verzeichnis. Sie würde laufen müssen, als
aus dem Verzeichnis "testpackage" ist ein Unterverzeichnis.
InformationsquelleAutor Ernest Friedman-Hill