Ich versuche, eine Java-Anwendung auszuführen, erhalte jedoch den folgenden Fehler:
java.lang.ClassNotFoundException:
Nach dem Doppelpunkt steht der Speicherort 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?
java
class
classpath
classnotfoundexception
user2426316
quelle
quelle
Antworten:
Ihr Klassenpfad ist unterbrochen (was in der Java-Welt ein sehr häufiges Problem ist).
Abhängig davon, wie Sie Ihre Anwendung starten, müssen Sie das Argument in
-cp
Ihren Klassenpfadeintrag in MANIFEST.MF oder Ihr Festplattenlayout überarbeiten .quelle
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 namens com gesucht , dann unter diesem Verzeichnis nach mycompany und Schließlich wird in diesem Verzeichnis nach einer Datei namens Foo.class gesucht .
In der zweiten Instanz wird für JAR-Dateien die JAR-Datei nach dieser Klasse durchsucht. Eine JAR-Datei ist in Wirklichkeit nur eine komprimierte Sammlung von Verzeichnissen wie die oben genannten. Wenn Sie eine JAR-Datei entpacken, erhalten Sie eine Reihe von Verzeichnissen und Klassendateien, die dem obigen Muster folgen.
Die JVM durchläuft also einen Klassenpfad von Anfang bis Ende und sucht nach der Definition der Klasse, wenn sie versucht, die Klassendefinition zu laden. Zum Beispiel im Klassenpfad:
C: / myproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
Die JVM wird versuchen , in dem Verzeichnis suchen Klassen zuerst, dann in stuff.jar und schließlich in otherstuff.jar .
Wenn Sie eine ClassNotFoundException erhalten, bedeutet dies, dass die JVM den gesamten Klassenpfad durchlaufen hat und die Klasse, auf die Sie verweisen wollten, nicht gefunden hat. Die Lösung besteht, wie so oft in der Java-Welt, darin, Ihren Klassenpfad zu überprüfen.
Sie definieren einen Klassenpfad in der Befehlszeile, indem Sie java -cp und dann Ihren Klassenpfad sagen . In einer IDE wie Eclipse haben Sie eine Menüoption, um Ihren Klassenpfad anzugeben.
quelle
Dies ist die beste Lösung, die ich bisher gefunden habe.
Angenommen, wir haben ein Paket
org.mypackage
mit den Klassen: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 gesucht werden soll, die unser Paket definieren. Um das Programm zu starten, müssen wir den folgenden Befehl verwenden:quelle
Wenn Sie den Pfad der Klasse oder das JAR kennen, das die Klasse enthält, fügen Sie ihn Ihrem Klassenpfad hinzu, während Sie ihn ausführen. Sie können den hier erwähnten Klassenpfad verwenden:
unter Windows
unter UNIX / Linux
quelle
Versuchen Sie diese, wenn Sie Maven verwenden. Ich benutze maven für mein Projekt und wenn ich
mvn clean install
versuche, ein Programm auszuführen, wird die Ausnahme ausgelöst . Also bereinige ich das Projekt und führe es erneut aus und es funktioniert für mich.Ich benutze Eclipse IDE.
Versuchen Sie für die Ausnahme "Klasse nicht gefunden" beim Ausführen des Junit-Tests
mvn clean test
einmal auszuführen . Es werden alle Testklassen kompiliert.quelle
Um den Speicherort einer Klasse über die Befehlszeile zu Ihrem Klassenpfad hinzuzufügen, fügen Sie einfach
-cp
oder-classpath
und den Speicherort der Klasse hinzu, während Sie sie ausführen. IEWenn Sie eine IDE wie Eclipse ausführen, können Sie mit der rechten Maustaste auf klicken
project -> build path -> configure build path
und die externe JAR, die Ihre Klasse enthält, zum Erstellungspfad hinzufügen. Dies sollte dann einwandfrei funktionieren.quelle
Verwenden ';' als Trennzeichen. Wenn Ihre Umgebungsvariablen richtig eingestellt sind, sollten Sie Ihre Einstellungen sehen. Wenn Ihr PATH und CLASSPATH korrekt sind, sollten Windows diese Befehle erkennen. Sie müssen Ihren Computer NICHT neu starten, wenn Sie Java installieren.
quelle
Fügen Sie dem CLASSPATH den vollständigen Pfad der JAR-Datei hinzu. Unter Linux verwenden :
export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
. Eine andere Möglichkeit (ohne den CLASSPATH zu bearbeiten) bestand darin, das JAR im aktuellen Projektordner zu entpacken.Wege haben bei mir nicht funktioniert:
1) Verwenden der
-cp
Option mit vollständigem Pfad der JAR-Datei.2) Verwenden Sie
-cp
nur den Namen jar, wenn Sie sich im aktuellen Ordner befinden3) Kopieren Sie die JAR in den aktuellen Projektordner
4) Kopieren des Glases an die Standardposition von Java-Gläsern (/ usr / share / java)
Diese Lösung wird für die Klasse com.mysql.jdbc.Driver in mysql-connector-java.5 - *. Jar gemeldet, die unter Linux mit OpenJDK Version 1.7 arbeitet
quelle
Gehen Sie nach oben und entfernen Sie die Importanweisung, falls vorhanden, und importieren Sie die Klasse erneut. Aber wenn das nicht der Fall ist, machen Sie eine Reinigung, dann bauen Sie. Verwenden Sie Netbeans oder Eclipse?
quelle
Ich bin auch darauf gestoßen und habe alle anderen Lösungen ausprobiert. Ich hatte die .class-Datei nicht in meinem HTML-Ordner, sondern nur die .java-Datei. Nachdem ich die .class-Datei hinzugefügt hatte, funktionierte das Programm einwandfrei.
quelle
Es kann passieren, dass Ihr Klassenpfad nicht korrekt ist
Lassen Sie uns eine serialisierbare Klasse und eine deserialisierbare Klasse unter demselben Projektnamen setzen. Sie führen die serialisierbare Klasse aus und erstellen ein serialisierbares Objekt in einem bestimmten Ordner. Jetzt benötigen Sie die desearialisierten Daten. In der Zwischenzeit funktioniert es nicht, wenn Sie den Namen des Projekts ändern. Sie müssen zuerst die serialisierbare Klasse ausführen und dann die Datei deserialisieren.
quelle
Wenn Sie Maven verwenden, versuchen Sie, alle Projekte zu aktualisieren und Snapshots zu erzwingen. Es wird auch sauber und alle Klassenpfade wieder aufgebaut. Es hat mein Problem gelöst.
quelle
Ich habe es gerade getan
1. Ungültige Caches und Neustart
2. Mein Projekt wurde neu erstellt, wodurch das Problem behoben wurde
quelle
Ich habe versucht, .jar aus C # -Code mit
Process
class auszuführen . Der Java-Code wurde erfolgreich von Eclipse ausgeführt, jedoch nicht von C # Visual Studio. Selbst wenn Sie direkt auf die JAR-Datei klicken, wurde er mitClassNotFoundException:
Ausnahme immer gestoppt . Die Lösung für mich war, das Java-Programm als "Runnable JAR file" anstelle von "JAR File" zu exportieren. Hoffe es kann jemandem helfen.quelle
Dies kann unter Windows nach einem Java-Update geschehen, bei dem die alte Version des Java-SDK fehlt und eine neue vorhanden ist. Ich würde prüfen, ob Ihre IDE die installierte Java SDK-Version verwendet (IntelliJ: STRG + UMSCHALT + ALT + S).
quelle
Wenn Sie mehr hinzugefügt ( von Drittanbietern) ** Bibliotheken und erweitern ** Anwendungsklasse
Dann könnte es vorkommen.
Dazu müssen Sie
multiDexEnabled true
Ihre erweiterteApplication
Klasse festlegen und durch ersetzenMultiDexApplication
.Es wird gelöst.
quelle
Grundlegende generische Frage - einfachste generische Antwort;)
Angesichts der Informationen gehe ich davon aus, dass Sie möglicherweise einen grundlegenden Ansatz zum Codieren, Erstellen / Kompilieren und Ausführen einer einfachen Konsolen-App wie "Hello World" mit einem einfachen Texteditor und einer Befehlsshell versuchen.
Dieser Fehler tritt im folgenden Szenario auf:
Mit anderen Worten, verwenden Sie:
PS Das Hinzufügen der Dateierweiterung .class führt zu demselben Fehler. Stellen Sie außerdem sicher, dass sich der bin-Ordner von Java (JDK / JRE) im PATH des Umgebungsvariablen des Betriebssystems befindet.
quelle
Wenn Sie maven verwenden, überprüfen Sie, ob Sie dieses Plugin in Ihrem
pom.xml
:Dadurch wird Ihre Abhängigkeit (der Ausnahmegrund) in Ihr Glas verschoben.
Zu Ihrer Information : Dies schließt alle Abhängigkeiten ein, die im letzten Glas aufgeblasen sind
quelle
In meinem Fall hat die als Ausnahme "Klasse nicht gefunden" ausgelöste Klasse Eigenschaften, die sich auf SSL-Zertifikate beziehen. Schließen Sie die Eclipse und öffnen Sie sie als "Als Administrator ausführen". Das Problem wurde behoben. Da Eclipse eine berechtigungsbezogene Berechtigung hat, wird eine solche Ausnahme ausgelöst.
quelle
Fügen Sie den gesamten Code in den try-Block ein und fangen Sie die Ausnahme in einem catch-Block ab
quelle