Java NoClassDefFoundError-Fehler beheben
In der Sprache Java sind Fehler Anomalien, die hauptsächlich aufgrund fehlender Ressourcen auftreten. Darüber hinaus können Fehler zur Kompilierzeit nicht abgefangen werden und treten zur Laufzeit auf.
Die Fehler werden auch als ungeprüfte Ausnahmen bezeichnet. Es kann nicht überprüft werden, ob ein Fehler auftreten kann oder nicht einmal die Kompilierung erfolgreich durchgeführt wird.
Die verschiedenen Fehler, die unter der Klasse Error
vorhanden sind, sind AssertionError
, NoClassDefFoundError
, OutOfMemoryError
usw.
Der NoClassDefFoundError
ist ein Untertyp der Klasse Error
, der sagt oder bezeichnet das Java Runtime Environment oder (JRE) die Klassendefinition, die zum Zeitpunkt der Kompilierung vorhanden war, aber zur Laufzeit nicht verfügbar ist, nicht laden kann. Die Klasse Error
befindet sich im Paket javas.lang
.
Die Klasse NoClassDefFoundError
befindet sich unter LinkageError
. Der Fehler
ist eine Art von Verknüpfungsproblem, das auftritt oder auftritt, wenn wir nicht die richtige IDE (Integrated Development Environment) wie IntelliJ IDEA, Eclipse usw. verwenden und die Konsole zum Ausführen des Programms verwenden.
Die IDE arbeitet so, dass die Klassen, die von der Hauptklasse abhängig sind, vorher kompiliert werden. In einer Konsole oder einem Terminal liegt es jedoch in der Verantwortung des Benutzers, alle abhängigen Klassen zu kompilieren und dann die Hauptklasse auszuführen, wodurch das Risiko eines Verknüpfungstypfehlers verringert wird.
Lassen Sie uns den Fehler anhand eines Java-Codeblocks verstehen.
public class NoClassDefinitionError {
public static void main(String[] args) {
A a = new A();
a.show();
}
}
class A {
void show() {
System.out.println("In class A");
}
}
Erstellen Sie im obigen Codeblock eine Java-Klassendatei mit dem Namen NoClassDefinitionError
. Speichern Sie die Datei mit der Erweiterung .java
.
Öffnen Sie dann die Klasse im Editor, kopieren Sie den Codeblock und fügen Sie ihn in die Klassendatei ein. Öffnen Sie eine Eingabeaufforderung und wechseln Sie zu dem Speicherort der Datei.
Führen Sie den ersten Befehl aus, um den Codeblock-Befehl javac NoClassDefinitionError
zu kompilieren.
Der Befehl erfordert, dass die Umgebungsvariable PATH
standardmäßig gesetzt ist, bevor der Befehl javac verwendet wird. Stellen Sie sicher, dass die PATH
-Variable den bin-Speicherort von Java bereits zuvor hinzugefügt hat.
Andernfalls wird ein Fehler ausgegeben, da javac nicht als interner oder externer Befehl, lauffähiges Programm oder Batch-Datei erkannt wird.
Mit dem javac-Befehl kann der Compiler eine .class
-Datei erstellen, die nichts anderes als die Bytecode-Version der Java-Datei ist. Diese Datei ist für Java Virtual Machine oder JVM leicht verständlich, um das Programm auszuführen.
Rufen Sie nun den Ort auf, an dem die Datei .java
gespeichert wird. Es scheint einfach, die Datei .class
zu finden, die nach dem Ausführen des javac-Befehls erstellt wird. Entfernen Sie die Datei A.class
manuell vom Speicherort.
Versuchen Sie, den Befehl java NoClassDefinitionError
auszuführen.
Der Befehl java
führt intern die Java-Anwendung aus, indem er alle abhängigen Klassendateien lädt und nach der Hauptmethode sucht. Wenn die Klassendefinition nicht gefunden werden kann, wird eine Laufzeitausnahme angezeigt.
Unten ist ein kleiner Code des Fehlerblocks, der ausgefüllt wird, wenn dieser Fehler
auftritt.
Exception in thread "main" java.lang.NoClassDefFoundError
: A at NoClassDefinitionError.(NoClassDefinitionError.java : 3)
Nachfolgend sind verschiedene Lösungen zur Behebung des Problems aufgeführt, wenn ein Fehler auftritt.
- Prüfen Sie, ob sich der Klassenname, der ausgeführt werden soll, an der genauen und gewünschten Position befindet.
- Prüfen Sie, ob
.class
-Dateien für die Java-Klasse vorhanden sind, die ausgeführt werden soll. Wenn die Klassendatei nicht vorhanden ist, kompilieren Sie zuerst die andere Klasse und lassen Sie die Klassendatei generieren. - Überprüfen Sie auf transitive Abhängigkeiten und kompilieren Sie die Klassen, die zum Ausführen der Hauptklassendatei benötigt werden. A->B und B-> C In diesem Fall ist A transitiv abhängig von der C-Klasse. Die transitive Abhängigkeit bezeichnet eine indirekte Beziehung, die zwischen drei verschiedenen Dateien besteht, die funktional voneinander abhängig sind.
- Die direkte Verwendung der IDE-Umgebung verringert die Wahrscheinlichkeit,
noClassDefFoundError
-Probleme zu vermeiden, da die Auflösung von Abhängigkeiten und transitive Abhängigkeiten vor dem eigentlichen Lauf behandelt werden. - Untersuchen Sie den Stack-Trace richtig, da er ein genaues Verständnis dafür gibt, wo das Problem beginnt, sich zu füllen und seine Auswirkungen auf den Codefluss von allen Orten aus, an denen es ausgelöst wird. Der Stack-Trace sollte dabei helfen, das Problem zu beheben.
- Fügen Sie den Ort, an dem der Java-Befehl ausgeführt wird, in die Variable
CLASSPATH
ein. Die Variable hilft bei der Suche nach dem Pfad, in dem die Klassendateien ausgewählt und geladen werden sollen, wenn das Programm in der Java Runtime Environment ausgeführt wird.
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedInVerwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse