質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

13294閲覧

javaの導入がうまくできません

lie_lay_lain3

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2018/12/15 05:36

編集2018/12/17 15:49

前提・実現したいこと

javaの導入をしたいです。

発生している問題・エラーメッセージ

Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: a 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(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)

該当のソースコード

java

1class a{ 2public static void main(String[] args){ 3System.out.println("a"); 4} 5} 6

試したこと

javaアップデート
JDKアップデート
Runtimeの有効設定(?)確認
環境変数設定

補足情報(FW/ツールのバージョンなど)

Ver18 191

理解度について:classのバージョンが55と最新であるのに対してRuntimeのバージョンが古いためエラーが起きているのではないかと考えていたのですが、アップデートしても解決しなかったためわからないです・・・・

理解度について追記:
javaのクラスを作るバージョンとコンパイルするバージョンが違うため実行できないということでしょうか?
過去の質問も漁ったのですがよくわかりません・・・。クラスの方のバージョンをさげることで解決できるのでしょうか

解決後追記:
class ver55に対してjava ver11が必要なことは理解して、JDK11を導入できていると思っていましたが、Pathがjre18_191にも通っていたためエラーが発生していたようです。

kumaGoro_95👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/15 05:38

エラーに原因が書いてありますがどの辺りまで理解されていますでしょうか?
yukkuri

2018/12/15 05:47

このタイプの質問はよくあるので過去の質問を少し調べてみてはどうでしょう。
退会済みユーザー

退会済みユーザー

2018/12/15 06:03

java 11 か
guest

回答1

0

ベストアンサー

初めまして。僕もJava初心者で誤った情報を提供してしまうことがありますので、一度最後まで目を通して納得していただいた上で、作業していただくと幸いです。

今回主に参考にさせていただいたのは以下のサイトです。

では、2行目の

class file version 55.0

から実行しようとしているClassファイルのバージョンが55と書いていると思うのですが、その後にある

this version of the Java Runtime only recognizes class file versions up to 52.0

これを読んでみると、今入っているJREはバージョンが52のClassファイルしか読み込めないよと書いてあるので、やはりJDKとJavaのバージョンがあっていないと考えるのが自然でしょうか。

こちらには、

JREの仕様バージョンサポートしているバージョン更新日
1.448.0  
1.549.0  
1.650.0  
1.751.0  
1.852.0  
953.02017-09-22
1054.02018-04-30
1155.02018-10-01 

このような表があり、先程記述したことから、JDKは11、JREは1.8なので実行できないのも筋が通っているかと思います。

lie_lay_lain3さんはJavaのアップデートもJDKのアップデートも既にしていて、両方とも最新版と思うのですが、取り敢えず今のバージョンを確認してみましょう。まず、コマンドプロンプトなり、端末なりターミナルなりを開いて、下記の2つのコマンドを試してみましょう。

> where java > where javac

私の環境(Windows10)ですとこうなります。

C:\Users[UserName]>where java c:\program files (x86)\common files\Oracle\Java\javapath\java.exe C:\Program Files\Java\jdk-11.0.1\bin\java.exe C:\Users[UserName]>where javac C:\Program Files\Java\jdk-11.0.1\bin\javac.exe

java.exeとjavac.exeが同じディレクトリにあることがわかるかと思います。

もし同じディレクトリになかったら環境変数がしっかり設定できていないのかもしれません。
ちなみにjdkはこちらからダウンロードしました。
環境変数の作業はご自分で調べたほうが身につくかと思いますので省略させていただきます。

(僕はJDKだけでいいと思うんですがね(JREも付属しているため)(ソースはここ)
(なので1番早いのはjreを消してjdkのみにすることでしょうか。)
(やったことないのでわかりませんが)

説明が下手なので、分かりにくい(どうすれば良いかが分からない)事があるかもしれません。この回答に返信していただければ、対応したいと思います。
(私が誤った情報を提供している場合はご指摘ください。)

追記
実は私自身

C:\Users[UserName]>java --version java 10.0.2 2018-07-17 Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

で、jdk11に環境変数を通しているはずなのになんでjava 10.0.2なんだ(?????)と思って環境変数の「システム環境変数」の「Path」に~~~/javapath/というのがあったので削除し、コントロールパネルでjreを削除したところ、

C:\Users[UserName]>java -version java version "11.0.1" 2018-10-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

となり、javaもjavacもjdk11のを扱うことが出来ています。

投稿2018/12/16 00:19

編集2018/12/16 00:22
CreeperSaviour

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lie_lay_lain3

2018/12/17 15:35

初めまして、回答ありがとうございます。 JDKの再インストール、環境変数の再設定、jreの削除などいろいろ試してみたのですが、 C:\Users\owner>where java C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe C:\ProgramData\Oracle\Java\javapath\java.exe C:\Program Files (x86)\Java\jdk-11.0.1\bin\java.exe C:\Users\owner>where javac C:\Program Files (x86)\Java\jdk-11.0.1\bin\javac.exe と、表示されるにも関わらず、 C:\Users\owner>java -version Error: could not open `C:\Program Files (x86)\Java\jre1.8.0_191\lib\i386\jvm.cfg' と表示されてしまいます。 また、javacは実行できるのですが、javaコマンドは実行できません。 Pathは正しく設定できていると思うのですが、以前javaがあったところが参照されているように思います。 あとはどこをいじったらいいのかわからず・・・教えていただきたいです。お願いします。
CreeperSaviour

2018/12/17 15:43

今環境が手元にないので、憶測になるかもしれないのですが、ご了承ください。(スマホから返信していますので、誤字脱字もあるかもしれませんがその点もお願いいたします) 環境変数の方をいじってみてはいかがでしょうか。環境変数のシステム環境変数のPathの方に C:\Program Files (x86)\Common Files\Oracle\Java\javapath の様な項目がありませんか? 僕の場合、それを消して、jreをアンインストール(エクスプローラーからの直接削除ではなく)することでjdk11を扱うことができましたが…どうでしょう? エクスプローラーから直接削除した場合、ゴミ箱に残っていれば復元してコントロールパネルか設定からアンインストールするといいと思います。 もしゴミ箱を空にしているようであれば、返信ください。(うろ覚えですがその場合、レジストリをいじって解決していたサイトを訪れたことがある気がします。)
lie_lay_lain3

2018/12/17 15:46

C:\Program Files (x86)\Common Files\Oracle\Java\javapath C:\ProgramData\Oracle\Java\javapath といったPathがあったので削除したところ、うまく実行できました! 自分一人ではどうにもならず大変困っていたのでとても助かりました。ありがとうございました!
CreeperSaviour

2018/12/17 16:04

いえ、私も初めて回答したので私の説明が不十分だったと言う事もあるかと思います。 さて、今後エラーメッセージが読めない時の解決策として、私なりの方法として参考にして頂きたいのですが、(勿論どちらでも良いです(笑)) 今回私は「this version of the Java Runtime only 〜〜〜」と言う様に一度行の始めにあるエラーメッセージを検索にかけて、ヒットした英語のサイトを読んで(英語力皆無でも、最初は日本語のサイトでも良いと思います)解決策を見つけました。 先程のjavapathについては上の方法で調べても出てこない(エラーが出るわけではない為)ので、こういったサービス(teratail等)を利用すると解決策が得られるかもしれません。 (ちなみにjavapathは環境変数を見てたら偶然見つけたもので消してみたらちゃんと動くようになったってだけです(苦笑)) 今回この質問を見て、その事について調べると、初めて自分の環境がおかしいことに気付けました。こちらこそ、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問