Ich versuche eine Java-Anwendung auszuführen, erhalte jedoch diesen Fehler:
Java.lang.ClassNotFoundException:
Nach dem Doppelpunkt folgt die Position der fehlenden Klasse. Ich weiß jedoch, dass dieser Ort nicht existiert, da sich die Klasse an einem anderen Ort befindet. Wie kann ich den Pfad dieser Klasse aktualisieren? Hat es etwas mit dem Klassenpfad zu tun?
Ihr Klassenpfad ist kaputt (was ein sehr allgemeines Problem in der Java Welt ist).
Abhängig davon, wie Sie Ihre Anwendung starten, müssen Sie das Argument in -cp
, Ihren Klassenpfadeintrag in MANIFEST.MF oder Ihr Festplattenlayout ändern.
Ein Klassenpfad ist eine Liste von Speicherorten, von denen Klassen geladen werden sollen.
Diese "Speicherorte" können entweder Verzeichnisse oder JAR-Dateien sein.
Bei Verzeichnissen folgt die JVM einem erwarteten Muster zum Laden einer Klasse. Wenn ich das Verzeichnis C:/myproject/classes in meinem Klassenpfad habe und versuche, eine Klasse com.mycompany.Foo zu laden, wird im Klassenverzeichnis nach einem Verzeichnis mit dem Namen com gesucht , dann unter diesem Verzeichnis ein Verzeichnis namens mycompany , und schließlich wird in diesem Verzeichnis nach einer Datei mit dem Namen Foo.class gesucht.
Im zweiten Fall wird die JAR-Datei nach JAR-Dateien nach dieser Klasse durchsucht. Eine JAR-Datei ist in Wirklichkeit nur eine gezippte Sammlung von Verzeichnissen wie oben. Wenn Sie eine JAR-Datei entpacken, erhalten Sie eine Reihe von Verzeichnissen und Klassendateien nach dem oben angegebenen Muster.
Daher durchläuft die JVM einen Klassenpfad von Anfang bis Ende, um nach der Definition der Klasse zu suchen, wenn versucht wird, die Klassendefinition zu laden. Zum Beispiel im Klassenpfad:
C:/myproject/classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
Die JVM versucht zuerst in das Verzeichnis classes , dann in stuff.jar und schließlich in otherstuff.jar zu suchen.
Wenn Sie eine ClassNotFoundException abrufen, bedeutet dies, dass die JVM den gesamten Klassenpfad durchlaufen hat und nicht die Klasse gefunden hat, die Sie referenzieren wollten. Die Lösung, wie so oft in der Java-Welt, besteht darin, Ihren Klassenpfad zu überprüfen.
Sie definieren einen Klassenpfad in der Befehlszeile, indem Sie Java -cp und dann Ihren Klassenpfad angeben. In einem IDE wie Eclipse haben Sie eine Menüoption, um Ihren Klassenpfad anzugeben.
Dies ist die beste Lösung , die ich bisher gefunden habe.
Angenommen, wir haben ein Paket namens org.mypackage
, das die Klassen enthält:
und die Dateien, die dieses Paket definieren, werden physisch im Verzeichnis D:\myprogram
(unter Windows) oder /home/user/myprogram
(unter Linux) gespeichert.
Die Dateistruktur sieht folgendermaßen aus:
Wenn wir Java aufrufen, geben wir den Namen der auszuführenden Anwendung an: org.mypackage.HelloWorld
. Wir müssen Java jedoch auch mitteilen, wo nach den Dateien und Verzeichnissen zu suchen ist, die unser Paket definieren. Um das Programm zu starten, müssen wir den folgenden Befehl verwenden:
HINWEIS: Sie müssen den obigen Befehl
Java
ausführen, unabhängig von Ihrem aktuellen Standort. Dies gilt jedoch nicht fürjavac
. Zum Beim Kompilieren können Sie sogar direkt in das Verzeichnis wechseln, in dem Sie Ihre.Java
-Dateien und führen Siejavac ClassName.Java
direkt aus.
Wenn Sie den Pfad der Klasse oder der JAR-Datei kennen, die die Klasse enthält, fügen Sie sie während der Ausführung zu Ihrem Klassenpfad hinzu. Sie können den Klassenpfad wie hier erwähnt verwenden:
unter Windows
Java -classpath .;yourjar.jar YourMainClass
unter UNIX/Linux
Java -classpath .:yourjar.jar YourMainClass
Probieren Sie diese aus, wenn Sie Maven verwenden. Ich benutze Maven für mein Projekt und wenn ich mvn clean install
mache und versuche, ein Programm auszuführen, löst es die Ausnahme aus. Also säubere ich das Projekt und führe es erneut aus, und es funktioniert für mich.
Ich benutze Eclipse IDE.
Führen Sie für die Klasse Nicht gefundene Ausnahme beim Ausführen des Junit-Tests einmal mvn clean test
aus. Es werden alle Testklassen zusammengestellt.
Fügen Sie der CLASSPATH ..__ die Datei full path of jar hinzu. In Linux verwenden Sie: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
. Auf andere Weise (ohne Bearbeiten des CLASSPATH) funktionierte das Entpacken des Jars im aktuellen Projektordner.
Wege haben für mich nicht funktioniert:
1) Verwenden der Option -cp
mit vollständigem Pfad der JAR-Datei.
2) Verwenden Sie -cp
mit nur dem Namen der jar-Datei im aktuellen Ordner
3) Kopieren der Dose in den aktuellen Projektordner
4) Kopieren der Dose in den Standardspeicherort von Java-Dosen (/ usr/share/Java)
Diese Lösung wird für die Klasse com.mysql.jdbc.Driver in mysql-connector-Java.5 - * .jar gemeldet, wenn unter Linux mit OpenJDK Version 1.7 gearbeitet wird.
Benutzen ';' als Trennzeichen. Wenn Ihre Umgebungsvariablen richtig eingestellt sind, sollten Sie Ihre Einstellungen sehen. Wenn PATH und CLASSPATH korrekt sind, sollte Windows diese Befehle erkennen. Sie müssen Ihren Computer NICHT neu starten, wenn Sie Java installieren.
Um den Ort einer Klasse über die Befehlszeile zu Ihrem Klassenpfad hinzuzufügen, fügen Sie einfach -cp
oder -classpath
und den Ort der Klasse hinzu, während Sie sie ausführen. I.E.
Java -cp "c:/location/of/file" YourProgram
Wenn Sie eine IDE wie Eclipse ausführen, können Sie mit der rechten Maustaste auf project -> build path -> configure build path
Klicken und die externe JAR, die Ihre Klasse enthält, zum Buildpfad hinzufügen.
Ich bin auch darauf gestoßen und habe alle anderen Lösungen ausprobiert. Ich hatte die .class-Datei nicht in meinem HTML-Ordner, ich hatte nur die .Java-Datei. Nachdem ich die .class-Datei hinzugefügt hatte, funktionierte das Programm einwandfrei.
Dies kann passieren, wenn der Klassenpfad nicht korrekt ist
Lassen Sie uns eine serialisierbare Klasse und eine deserialisierbare Klasse unter demselben Projektnamen positionieren. Sie führen die serialisierbare Klasse aus und erstellen ein serialisierbares Objekt in einem bestimmten Ordner. Jetzt benötigen Sie die desearialisierten Daten. Wenn Sie in der Zwischenzeit den Namen des Projekts ändern, funktioniert es nicht. Sie müssen zuerst die serialisierbare Klasse ausführen und dann die Datei deserialisieren.
Wenn Sie maven Verwenden, versuchen Sie, alle Projekte zu aktualisieren und die Momentaufnahmen zu erzwingen . Außerdem werden alle Klassenpfade ...__ bereinigt und neu erstellt.
Gehen Sie nach oben und entfernen Sie die Importanweisung, falls vorhanden, und importieren Sie die Klasse erneut. Wenn dies nicht der Fall ist, führen Sie einen Clean-Build durch. Verwenden Sie Netbeans oder Eclipse?
Ich habe es gerade getan
1.Invalidierung von Caches und Neustart
2. Mein Projekt neu aufgebaut welches das Problem gelöst hat
Dies kann unter Windows nach einem Java-Update passieren, bei dem die alte Version des Java SDK fehlt und eine neue Version vorhanden ist. Ich würde prüfen, ob Ihre IDE die installierte Java SDK-Version verwendet (IntelliJ: STRG + UMSCHALT + ALT + S).
Ich habe versucht, .jar mit Process
class vom C # -Code auszuführen. Der Java-Code wurde erfolgreich von Eclipse ausgeführt, aber nicht von C # Visual Studio. Wenn Sie sogar direkt auf die JAR-Datei klicken, wurde er immer mit der Ausnahme ClassNotFoundException:
beendet. Lösung für mich war das Java-Programm als "Runnable JAR-Datei" anstelle von "JAR-Datei" zu exportieren. Ich hoffe es kann jemandem helfen.
Wenn Sie mehrere (Drittanbieter-) ** Bibliotheken hinzugefügt und ** Anwendung Klasse erweitert haben
Dann könnte es vorkommen.
Dafür müssen Sie multiDexEnabled true
setzen und Ihre erweiterte Application
-Klasse durch MultiDexApplication
ersetzen.
Es wird gelöst.
Grundlegende generische Frage - einfachste generische Antwort;)
In Anbetracht der Informationen gehe ich davon aus, dass Sie einen einfachen Ansatz zum Codieren, Erstellen/Kompilieren und Ausführen einer einfachen Konsolen-App wie "Hello World" versuchen, indem Sie einen einfachen Texteditor und eine Befehls-Shell verwenden.
Dieser Fehler tritt in dem folgenden Szenario auf:
..\SomePath>javac HelloWorld.Java
..\SomePath>Java HelloWorld.class
Mit anderen Worten:
..\SomePath>Java HelloWorld
P.S. Das Hinzufügen der Dateierweiterung .class verursacht den gleichen Fehler . Stellen Sie außerdem sicher, dass sich der Bin-Ordner von Java (JDK/JRE) im PFAD des Betriebssystems für Umgebungsvariablen befindet. PPS War ich in meinen Annahmen richtig?