Beheben Sie den java.lang.UnsupportedClassVersionError
-
Ursache des
java.lang.UnsupportedClassVersionError
-
Beheben Sie den
java.lang.UnsupportedClassVersionError
Dieses Tutorial demonstriert den Fehler Exception in thread main java.lang.UnsupportedClassVersionError
in Java.
Ursache des java.lang.UnsupportedClassVersionError
Der UnsupportedClassVersionError
ist eine Unterklasse der ClassFormatError
-Ausnahme, die ausgelöst wird, wenn JVM versucht, eine Klasse zu lesen und feststellt, dass die Klassendatei fehlerhaft ist oder die Datei nicht als Klasse interpretiert werden kann. Hier ist die Hierarchie der Ausnahme UnsupportedClassVersionError
:
Java.Lang.Object
Java.Lang.Throwable
Java.Lang.Error
Java.Lang.LinkageError
Java.Lang.ClassFormatError
Java.Lang.UnsupportedClassVersionError
Die Ausnahme UnsupportedClassVersionError
ist spezifisch für die Erkennung einer Klassendatei, die zuvor von einer niedrigeren Version von Java ausgeführt wurde und jetzt von einer neueren Version ausgeführt wird.
Angenommen, eine Java-Datei wurde von JDK 12 und jetzt von einer neueren JRE 8 ausgeführt. In diesem Fall wird die Ausnahme UnsupportedClassVersionError
ausgelöst, oder wenn wir die Klasse mit Java Version 1.8 kompilieren und sie mit Java 1.7 kompilieren, es wird den gleichen Fehler werfen.
Lassen Sie uns ein Beispiel in einer Klasse ausprobieren, die von der neueren Version von Java kompiliert und dann von einer älteren Version ausgeführt wird. Siehe Beispiel:
public class Unsupported_Class_Version_Error{
public static void main(String args[]) {
System.out.println("Hello this is Delftstack.com");
}
}
Der obige Code löst den UnsupportedClassVersionError
aus, wie unten gezeigt:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Die Ausgabe zeigt den Fehler, da der Code mit Java 1.8 kompiliert und mit Java 1.7 ausgeführt wird. Aus diesem Grund wird Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported major.minor version 52.0
geworfen.
Beheben Sie den java.lang.UnsupportedClassVersionError
Es gibt zwei Bedingungen für diesen Fehler, also liegt die Lösung in diesen beiden Bedingungen:
- Führen Sie den Code mit dem neuesten JDK und JRE aus.
- Kompilieren Sie den Code mit der älteren JDK-Version, damit er mit dem Runtime-JDK übereinstimmt.
- Eine einfache Lösung ist die Verwendung der Java Cross Compilation. Wenn das Production Environment JDK niedriger ist als das Build Environment, können wir eine Klassendatei mit einer niedrigeren Version durch Kreuzkompilierung generieren.
Der folgende Befehl wird verwendet, um eine Klassendatei für den obigen Code zu erstellen:
javac -target 1.7 Unsupported_Class_Version_Error.java
Wie oben erwähnt, besteht die Lösung darin, die Anwendung zur Kompilierungs- und Laufzeit mit denselben Versionen zu erstellen, oder zumindest ist die Kompilierzeitversion niedriger als die Laufzeitversion.
Der obige Fehler zeigt das Problem mit Major Minor-Versionen. Major Minor-Versionen sind die Versionen von JRE; Beispielsweise ist für JRE 8 die Hauptversion 52.0.
Wir müssen sicherstellen, dass beim Kompilieren und Ausführen der Java-Klassendatei keine Major-Minor-Versionsprobleme auftreten. Die Liste der JRE-Versionen, die mit der Klasse kompatibel sind, lautet:
Java SE 17 = 61,
Java SE 16 = 60,
Java SE 15 = 59,
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn FacebookVerwandter 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