java.lang.UnsupportedClassVersionError を修正します
このチュートリアルでは、Java での Exception in thread main java.lang.UnsupportedClassVersionError
エラーについて説明します。
java.lang.UnsupportedClassVersionError
の原因
UnsupportedClassVersionError
は、ClassFormatError
例外のサブクラスであり、JVM がクラスを読み取ろうとして、クラス ファイルの形式が正しくないか、ファイルをクラスとして解釈できないことが判明した場合にスローされます。 UnsupportedClassVersionError
例外の階層は次のとおりです。
Java.Lang.Object
Java.Lang.Throwable
Java.Lang.Error
Java.Lang.LinkageError
Java.Lang.ClassFormatError
Java.Lang.UnsupportedClassVersionError
UnsupportedClassVersionError
例外は、以前は下位バージョンの Java で実行され、現在は新しいバージョンで実行されているクラス ファイルの検出に固有のものです。
たとえば、Java ファイルが JDK 12 で実行され、現在は新しい JRE 8 で実行されているとします。その場合、UnsupportedClassVersionError
例外がスローされるか、Java バージョン 1.8 を使用してクラスをコンパイルし、Java 1.7 を使用してコンパイルすると、 同じエラーがスローされます。
新しいバージョンの Java でコンパイルされ、古いバージョンで実行されるクラスの例を試してみましょう。 例を参照してください:
public class Unsupported_Class_Version_Error{
public static void main(String args[]) {
System.out.println("Hello this is Delftstack.com");
}
}
上記のコードは、以下に示すように UnsupportedClassVersionError
をスローします。
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)
コードが Java 1.8 でコンパイルされ、Java 1.7 で実行されるため、出力にエラーが表示されます。 そのため、Exception in thread "main" java.lang.UnsupportedClassVersionError: Unsupported_Class_Version_Error : Unsupported major.minor version 52.0
がスローされます。
java.lang.UnsupportedClassVersionError
を修正する
このエラーには 2つの条件があるため、解決策は次の 2つの条件にあります。
- 最新の JDK および JRE でコードを実行します。
- 古いバージョンの JDK でコードをコンパイルして、ランタイム JDK と一致させます。
- 簡単な解決策の 1つは、Java クロス コンパイルを使用することです。 プロダクション環境の JDK がビルド環境よりも低い場合、クロスコンパイルを使用して、より低いバージョンのクラス ファイルを生成できます。
次のコマンドを使用して、上記のコードのクラス ファイルを作成します。
javac -target 1.7 Unsupported_Class_Version_Error.java
前述のように、解決策は、コンパイル時と実行時に同じバージョンでアプリケーションをビルドするか、少なくともコンパイル時のバージョンが実行時のバージョンよりも低いバージョンにすることです。
上記のエラーは、メジャー マイナー バージョンの問題を示しています。 メジャー マイナー バージョンは JRE のバージョンです。 たとえば、JRE 8 の場合、メジャー バージョンは 52.0 です。
Java クラス ファイルのコンパイルおよび実行中にメジャー マイナー バージョンの問題が発生しないようにする必要があります。 クラスと互換性のある JRE のバージョンのリストは次のとおりです。
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 Facebook