Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(UnsupportedClassVersionError)が出る原因と対処方法について

投稿日:2022年4月28日 更新日:

 

<目次>

(1) Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(UnsupportedClassVersionError)が出る原因と対処方法について
 (1-1) エラーメッセージ・発生状況
 (1-2) 原因
 (1-3) 対策
 (1-4) (対策②)実行環境のバージョンUPの手順

(1) Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(UnsupportedClassVersionError)が出る原因と対処方法について

(1-1) エラーメッセージ・発生状況

jarファイルを「java -jar XXX.jar」コマンドで実行しようとした際に下記のエラーが出ました(Windows、Linux両方で同じエラー内容)

(エラーメッセージ)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: XXXXX has been compiled by a more recent version of the Java Runtime (class file version 55.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(ClassLoader.java:756)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
 
(図111①)Linuxの例。Terminalから実行すると上記エラー

(図112①)Windowsの例。cmdから実行すると上記エラー
 
(図111②)(参考)Linuxの例。画面でjarをダブルクリック実行した場合も同様のエラー
 
(図112②)(参考)Windowsの例。画面でjarをダブルクリック実行した場合も同様のエラー

(1-2) 原因

結論としては、コンパイルしたJavaのバージョンと、インストールされているJavaのバージョンの不一致のために起きています。
 
メッセージに記載の「XXXXX has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0」の例で見ると、実行しようとしているjarファイルはJavaのバージョン55.0(Java 11)でコンパイルされていますが、皆様のマシンのJava環境はJavaのバージョン52.0(Java 8)である事が読み取れます。
 
ちなみに、この「55」や「52」といった数字とJavaのバージョンの関連性は次のようになっています。

49 = Java 5
50 = Java 6
51 = Java 7
52 = Java 8
53 = Java 9
54 = Java 10
55 = Java 11
56 = Java 12
57 = Java 13
58 = Java 14
 

(1-3) 対策

実行対象のjarをコンパイルしたJavaのバージョンと、ご自身の実行環境のJavaのバージョンを揃える形になりますが、大きく以下の2つ方向性になります。
 
(対策①)jarをリコンパイル
jarファイルの元となるプロジェクトやソースコード(.java)を保有している場合、実行環境のバージョン(例では「52=Java 8」)のJavaでコンパイルし直すことで、当該エラーが解消します。
 
(対策②)実行環境のバージョンUP
jarファイルの元となるプロジェクトやソースコード(.java)が無い場合(外部からダウンロードした等)は、環境のアップグレードをすれば解消します。

(1-4) (対策②)実行環境のバージョンUPの手順

・①初期状態ではJava 8が入っています。
 
(図131①)

・②新しいJava(jarをコンパイルしたVerより上のもの)をダウンロード&インストールします。
 
・ダウンロード(例:Windows 64bitの例)
 
(図132①)
・インストーラーを実行
(図132②)
(図132③)
(図132④)
(図132⑤)

・③環境変数の更新(JAVA_HOME、PATH)をします。
いずれも旧バージョン(例:Java 8)⇒新バージョン(例:Java 17)へ向き先を変更
 
・JAVA_HOMEの修正「例」
修正前:C:\Program Files\Java\jdk1.8.0_131
修正後:C:\Program Files\Java\jdk-17.0.1
 
(図133①)

・PATHの修正「例」
削除:C:\Program Files\Java\jdk1.8.0_131\bin
追加:C:\Program Files\Java\jdk-17.0.1\bin
 
(図133②)
 
(備考)よりスマートな記述
「%JAVA_HOME%\bin」とすれば、先程のJAVA_HOMEの値を活用できるため、今後Javaのバージョンが上がっても、PATHは修正せずに済みます。
 
・④Javaが新しいバージョンになったか?を次のコマンドで確認します。
 
> java -version
 
(図133③)

(出力例)
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, shari
 
・⑤エラーの解消確認
再度、jarファイルを実行してエラーが解消したか?を確認します。
 
(図134①)は私がエラーに遭遇したjarファイルで実施に試したものですが、当該エラーは出なくなりました(代わりに別のエラーが出ましたが💦)。
 
(図134①)
 
こちらのエラーについても、別途『★「Graphics Device initialization failed for :  es2, sw」エラーの原因と対処方法(Java FX関連)』でまとめていますので、もしご興味有る方はご覧ください。
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


  1. […] Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(Unsupp… […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaのラッパークラスとは?使い方や一覧をご紹介

<目次> (1) Javaのラッパークラスとは?使い方や一覧をご紹介  (1-1) ラッパークラスとは?  (1-2) 構文(オブジェクト生成)  (1-3) 代表的なメソッド(Integerを例に) …

JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)

<目次> (1) JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)  (1-1) Mapとは?  (1-2) Mapの種類や特徴   (1-2-1) …

Javaの選択ソートとは?アルゴリズムの流れ+サンプルプログラムをご紹介

<目次> (1) バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説  (1-1) バイナリ―サーチのアルゴリズム  (1-2) バイナリ―サーチの性能(処理回数)  (1-3) バイナリ …

double型で誤差が発生する件について+発生事例やサンプルプログラムも紹介

<目次> (1) double型では誤差が発生する事について  (1-1) double型は近似値を使用している  (1-2) double型の誤差の例 (1) double型で誤差が発生する件につい …

TwitterのAPIライブラリでリツイートした人の一覧を取得する方法

<目次> (1) TwitterのAPIライブラリでリツイートした人の一覧を取得する方法  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterのAPIライブラリでリツイートした …

  • English (United States)
  • 日本語
Top