Ich habe eine kompilierte Java-Klasse:
Echo.class
public class Echo {
public static void main (String arg) {
System.out.println(arg);
}
}
Ich gehe cd
in das Verzeichnis und gebe ein:java Echo "hello"
Ich erhalte diesen Fehler:
C:\Documents and Settings\joe\My Documents\projects\Misc\bin>java Echo "hello"
Exception in thread "main" java.lang.NoClassDefFoundError: Echo
Caused by: java.lang.ClassNotFoundException: Echo
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 java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Echo. Program will exit.
Was ist der einfachste Weg, um meinen Java-Code in einer Form abzurufen, die ich über die Befehlszeile ausführen kann, wenn ich Eclipse IDE verwenden muss?
Antworten:
Versuchen:
Angenommen, Sie haben kompiliert mit:
Dann besteht die Möglichkeit, dass sich das "aktuelle" Verzeichnis nicht in Ihrem Klassenpfad befindet (wo Java nach .class-Definitionen sucht).
Wenn dies der Fall ist und der Inhalt Ihres Verzeichnisses aufgelistet wird, wird Folgendes angezeigt:
Dann kann alles funktionieren:
oder
Und später, wie Fredrik betont, erhalten Sie eine weitere Fehlermeldung wie.
Wenn das passiert, lies seine Antwort :)
quelle
Sie müssen den Klassenpfad angeben. Dies sollte es tun:
Dies weist Java an,
.
(das aktuelle Verzeichnis) als Klassenpfad zu verwenden, dh den Ort, an dem nach Klassen gesucht wird. Beachten Sie, dass der Klassenpfad bei Verwendung von Paketen das Stammverzeichnis und nicht die Paketunterverzeichnisse enthalten muss. Beispiel: Wenn Ihre Klassemy.package.Echo
und die .class-Datei istbin/my/package/Echo.class
, ist das richtige Klassenpfadverzeichnisbin
.quelle
Sie haben keine gültige Hauptmethode ... Die Signatur sollte lauten: public static void main ( String [] args);
Daher sollte der Code in Ihrem Fall folgendermaßen aussehen:
Bearbeiten: Bitte beachten Sie, dass Oscar auch insofern Recht hat, als Sie fehlen. In Ihrem Klassenpfad würden Sie auf das Problem stoßen, das ich löse, nachdem Sie diesen Fehler behoben haben.
quelle
Mit Java 11 müssen Sie dieses Rigmarole nicht mehr durchlaufen!
Stattdessen können Sie Folgendes tun:
Sie müssen nicht vorher kompilieren, da alles in einem Schritt erledigt wird.
Sie können das Java 11 JDK hier herunterladen : JDK 11 GA Release
quelle
Wenn Sie in Ihrer Java-Quelle haben
und deine Klasse ist hello.java mit
und in diesem hallo.java hast du
Dann (nach der Kompilierung) changeDir (cd) in das Verzeichnis, in dem sich Ihre hello.class befindet. Dann
Beachten Sie das aktuelle Verzeichnis und den Paketnamen vor dem Klassennamen. Es funktioniert für meine Linux Mint und ich hoffe auch auf die anderen Betriebssysteme
Vielen Dank an Stack Overflow für eine Fülle von Informationen.
quelle
./mypackage/hello.class
Namen gefunden werden können. Siehe auch: Frage " Java im Paket über die Befehlszeile ausführen ".Meine Situation war etwas kompliziert. Ich musste drei Schritte ausführen, da ich eine DLL im Ressourcenverzeichnis für JNI-Code verwendete. Meine Dateien waren
Mein Code enthielt die folgende Zeile
Zuerst musste ich in das Klassenpfadverzeichnis wechseln
Als nächstes musste ich den Klassenpfad so ändern, dass er auf das aktuelle Verzeichnis verweist, damit meine Klasse geladen wird, und ich musste den Klassenpfad so ändern, dass er auf das Ressourcenverzeichnis verweist, damit meine DLL geladen wird.
Dann musste ich Java mit dem Klassennamen ausführen.
quelle
Haben Sie zuerst die Klasse mit dem Befehlszeilen-Javac-Compiler kompiliert? Zweitens scheint Ihre Hauptmethode eine falsche Signatur zu haben - sie sollte ein Array von String-Objekten aufnehmen und nicht nur eines:
Wenn Sie Ihren Code so geändert haben, dass er ein Array von String-Objekten aufnimmt, müssen Sie sicherstellen, dass Sie ein Element des Arrays und nicht das Array selbst drucken:
Wenn Sie die gesamte Liste der Befehlszeilenargumente drucken möchten, müssen Sie eine Schleife verwenden, z
quelle