Beheben Sie den java.lang.UnsupportedClassVersionError

Sheeraz Gul 20 Juni 2023
  1. Ursache des java.lang.UnsupportedClassVersionError
  2. Beheben Sie den 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:

  1. Führen Sie den Code mit dem neuesten JDK und JRE aus.
  2. Kompilieren Sie den Code mit der älteren JDK-Version, damit er mit dem Runtime-JDK übereinstimmt.
  3. 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 Gul avatar Sheeraz Gul avatar

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 Facebook

Verwandter Artikel - Java Error