677 Stimmen

Warum erhalte ich einen NoClassDefFoundError in Java?

Ich bekomme eine NoClassDefFoundError wenn ich meine Java-Anwendung ausführe. Was ist typischerweise die Ursache dafür?

1 Stimmen

Ich glaube, es kann auch passieren, wenn Sie Ihr Java-Programm nicht mit der richtigen Syntax ausführen. Zum Beispiel müssen Sie Ihre Klasse aus dem Root-Bin-Ordner mit dem vollständigen Paketnamen aufrufen (z. B. my.package.myClass). Ich würde genauer sein, wenn ich könnte, aber ich bin kein großer Java-Kenner. Ich kann mich nur daran erinnern, dass ich das ein paar Mal vermasselt habe.

1voto

logbasex Punkte 1016

Update [https://www.infoq.com/articles/single-file-execution-java11/]:

In Java SE 11 haben Sie die Möglichkeit, eine einzelne Quellcodedatei direkt zu starten, ohne Zwischenkompilierung. Nur zu Ihrer Bequemlichkeit, so dass Neulinge wie Sie nicht javac + java ausführen müssen (natürlich, und sie verwirrt zurücklassen, warum das so ist).

1voto

ᴠɪɴᴄᴇɴᴛ Punkte 1528

NoClassDefFoundError kann auch auftreten, wenn ein statisch Initialisierer versucht, ein Ressourcenbündel zu laden, das zur Laufzeit nicht verfügbar ist, z. B. eine Eigenschaftsdatei, die die betroffene Klasse aus dem META-INF Verzeichnis, ist aber nicht dort. Wenn Sie sich nicht NoClassDefFoundError können Sie manchmal nicht den vollständigen Stack-Trace sehen; um dies zu umgehen, können Sie vorübergehend eine catch Klausel für Throwable :

try {
    // Statement(s) that cause(s) the affected class to be loaded
} catch (Throwable t) {
    Logger.getLogger("<logger-name>").info("Loading my class went wrong", t);
}

0 Stimmen

Dies ist falsch. A fehlt Ressource führt nicht zu dieser Fehlermeldung. Sie erhalten ihn nur, wenn ein Klasse fehlt.

0 Stimmen

@StephenC Vielleicht sollte ich diesen Teil mehr betonen, aber ich schrieb for example a properties file that the affected class tries to load from the META-INF directory . Dies ist mir tatsächlich passiert, und ich konnte das Problem lösen. NoClassDefFoundError indem Sie die fehlende Eigenschaftsdatei hinzufügen. Ich habe diese Antwort genau deshalb hinzugefügt, weil man diesen Fehler unter den genannten Umständen nicht erwarten würde.

1 Stimmen

Sie haben dann etwas sehr Wichtiges in Ihrer Erklärung übersehen, denn die einzige Möglichkeit, wie eine fehlende Ressourcendatei könnte Diese Ausnahme wird ausgelöst, wenn Sie versuchen, die Ressourcendatei in einem static Initialisierung ... was eine ungeprüfte Ausnahme auslöste und die Klasse init zum Scheitern brachte. Jede ungeprüfte Ausnahme, die sich von der statischen Initialisierung ausbreitet, würde dies tun.

1voto

Ben Waters Punkte 127

In meinem Fall erhielt ich diese Fehlermeldung aufgrund einer Unstimmigkeit in den JDK-Versionen. Als ich versuchte, die Anwendung über Intelij auszuführen, funktionierte sie nicht, aber wenn ich sie über die Befehlszeile ausführte, funktionierte sie. Das liegt daran, dass Intelij versuchte, die Anwendung mit dem eingestellten Java 11 JDK auszuführen, aber auf der Kommandozeile wurde sie mit dem Java 8 JDK ausgeführt. Nachdem ich diese Einstellung unter Datei > Projektstruktur > Projekteinstellungen > Projekt-SDK geändert hatte, funktionierte es bei mir.

1voto

Alan Ackart Punkte 31

Ich bekam diesen Fehler, wenn ich Maven Abhängigkeit von einem anderen Modul zu meinem Projekt hinzufügen, das Problem wurde schließlich durch Hinzufügen gelöst -Xss2m in der JVM-Option meines Programms (seit JDK5.0 ist sie standardmäßig ein Megabyte groß). Es wird angenommen, dass das Programm nicht genug Stack hat, um die Klasse zu laden.

0voto

Steve Stilson Punkte 907

Ich habe NoClassDefFound-Fehler erhalten, wenn ich eine Klasse auf der Registerkarte "Order and Export" im Java Build Path meines Projekts nicht exportiert habe. Stellen Sie sicher, dass Sie auf der Registerkarte "Bestellung und Export" ein Häkchen bei allen Abhängigkeiten setzen, die Sie dem Build-Pfad des Projekts hinzufügen. Siehe Eclipse-Warnung: XXXXXXXXXXX.jar wird nicht exportiert oder veröffentlicht. Runtime ClassNotFoundExceptions können die Folge sein .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X