Java Exception in thread “main” java.lang.UnsupportedClassVersionError:の対処法

photo of person typing on computer keyboard

Jar化したJavaプログラムを開発環境と異なる環境で実行しようとしたときにエラーメッセージException in thread "main" java.lang.UnsupportedClassVersionErrorが発生する場合があります。このエラーメッセージの原因と対処法を解説します.

目次

Exception in thread “main” java.lang.UnsupportedClassVersionError

> java -jar MyApplication.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: MyApplication has been compiled by a more recent version of the Java Runtime (class file version 62.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

原因

Exceptionメッセージを要約すると、以下の通りです。

java.lang.UnsupportedClassVersionError:
実行環境のJREがサポートしているのはクラスファイルバージョン 52.0までです。
MyApplicationはより新しいバージョンのJRE (クラスファイルバージョン62.0) コンパイルされています。

java.lang.UnsupportedClassVersionError のエラーメッセージ

開発環境と実行環境のJREの差によってエラーが発生しています。このケースでいえば、実行環境のJREのバージョンが、開発環境に比べて古いためです。

対処法

対処法としては以下の2つが考えられます。

  • 対処法1 実行環境のバージョンをプログラムのコンパイルのJavaバージョン以上に新しくする。
  • 対処法2 プログラムをコンパイルするJavaのバージョンを実行環境よりも古くする。

なお、Javaのバージョンは以下のコマンドで確認できます。

> java -version
java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)

JREとVMがサポートするJavaクラスファイルの形式の対応表

JRE (Java VM)のバージョンVMがサポートするJavaクラスファイルの形式
1.448
1.549
1.650
1.751
1.852
953
1054
1155
1256
1357
1458
1559
1660
1761
1862
1963
JREとVMがサポートするJavaクラスファイルの形式の対応表
よかったらシェアしてね!
目次