java.lang.UnsupportedClassVersionError を修正します

Sheeraz Gul 2023年6月20日
  1. java.lang.UnsupportedClassVersionError の原因
  2. java.lang.UnsupportedClassVersionError を修正する
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つの条件にあります。

  1. 最新の JDK および JRE でコードを実行します。
  2. 古いバージョンの JDK でコードをコンパイルして、ランタイム JDK と一致させます。
  3. 簡単な解決策の 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 Gul
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

関連記事 - Java Error