レジストリキー「…」の値は「1.7」ですが、「1.6」が必要です。Java 1.7がインストールされ、レジストリがそれを指している


95

私の開発チームは最近、サーバーへの完全なアクセス権がないリモート開発環境に強制されました。切り替え前は、JRE 7とともにJava 1.7 x64で正常に動作していたJARがありました。新しいサーバーに移動すると、JARは問題なく動作していましたが、サーバー管理者の1人がJavaを古いバージョンに「更新」しましたバージョンを使用して、使用していたバージョンをアンインストールしました。理由を聞かないでください、わかりません。Java 1.7を再インストールし、JREとともに1.6をアンインストールしました。

実行時に次の問題が発生し、ビルドエラーは発生しません。

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

ラップトップで同じJARを問題なく実行しました。サーバーとラップトップの両方で、それぞれの%HOME%変数とシステムPATHにJDK 1.7とJRE 7があります。私はJRE 6を再インストールして、後でシステム環境のPATH変数に配置しましたが、結果は同じです。

レジストリを1.6に戻すように変更したところ、次のような結果になりました。これを調べたところ、複数のJavaがインストールされていることが原因であるように見えます(元の問題に戻ります)。

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0

私はさまざまなフォーラムを調べてきたので、皆さんの洞察に感謝しますが、正確に私の問題を抱えているようには見えません。また、これは私たちが使用している別のサーバーでも発生しています。ありがとう!

更新:JARを1.6または1.7に再コンパイルし、JDKを一致させることはできません。また、なぜ新しいバージョンのJavaが古いコンパイルバージョンを壊すのでしょうか。

回答:


159

これは、Java自体をどういうわけか混乱させたときに発生します。JRE 7が検出された場所でJava 6 VMを実行しようとしています。コマンドラインだけで入力した場合javajava -version環境設定が誤っている場合でも、この問題が発生することがあります。JARのコードがWindowsレジストリでそのことを探している非常にまれなケースを除いて、JARは問題ではありません(おそらくあなたのケースではありません)。

私の場合、私はjava.exejavaw.exeおよびjavaws.exeJava 6からWindows/System32フォルダーにありました(それがどのようにそこにあるのかわかりません)。内部のPATHにある残りのJDKおよびJRE C:\Java\jdk_1.7.0\bin。おっとっと!


62
同じ問題に直面しましたが、アンインストール後にJava 8で発生しました。Windows / System32にあるjava.exe、javaw.exe、javaws.exeを削除することで問題を修正しました。本当に奇妙なcozです。
C Deepak

2
お知らせありがとうございます。私の場合、JDK 1.7対JDK 1.8。
daoway 2014年

7
x86の方へ!! 私は数ヶ月前に1.8 jreを最初にインストールし、1.8 SDKを欲しがっていました。java.exejavaw.exe、およびjavaws.exeの下に格納されていますWindows/SysWOW64。また、私はそれがインストールさ1.8 SDKをインストールし、いくつかの理由のためjava.exejavaw.exeそして、javaws.exeC:/ProgramData/Oracle/Java/javapath。理由はわかりませんが、削除しても問題なくjava -version動作します。
Luminous

1
System32は私にとって鍵でした。javapathのバージョンが正しく、環境変数が適切に設定されていることを確認しました... System32の取引を修正するまで何も機能しませんでした。すべて同じページにある必要があります。
BK

2
indows / System32にあるjava.exe、javaw.exe、javaws.exeを削除すると、問題が解決します。ありがとう、@ C Deepak
Tahir Jilani、

59

すでにJava 7を実行しているシステムにJava 8(jdk&jre)をインストールするときに、同様のエラーが発生しました

エラー:レジストリキー 'Software \ JavaSoft \ Java Runtime

Environment '\ CurrentVersion'の値は '1.8'ですが、 '1.7'が必要です。

エラー:java.dllが見つかりませんでしたエラー:Java SEランタイム環境が見つかりませんでした。

私の環境は正しくセットアップされましたが(パスとjava_homeは正しく定義されています)、問題は8つ前のJavaインストーラーが機能する方法から発生します。 )Windowsシステムディレクトリに移動します。これらは、8より前の新しいインストールによって上書きされない限り、残ります。

ただし、Java 8インストーラーは、実際のJRE 8の場所を指すシンボリックリンクを新しいディレクトリC:\ ProgramData \ Oracle \ Java \ javapathに作成します。

つまり、実際には古い7つのexeを実行しますが、新しい8つのDLLを使用します。

したがって、解決策は、Windowsシステムディレクトリから上記の3つのJava exeを削除することです。

64ビットWindowsで32ビットJavaを実行している場合、exeはWindows \ SysWOW64にあり、それ以外の場合はWindows \ System32にあります。


これは実用的な解決策です。同じ問題に直面し、これで解決しました。
Sagar D

これははるかに良い解決策です...少なくとも私にとっては。ありがとう。
cbmeeks 2016年

28

私はwindows / system32でjavaファイルを削除しました。また、java 1.8ファイルへの3つのシンボリックリンクがあったため、c:\ ProgramData \ Oracle \ Java \ javapathをPATH変数から削除しました。

%JAVA_HOME%変数にJDK 1.7があり、PATHにjava1.7 / binがありました。

PS1:私の問題はJava 1.7とJava 1.8の間でした。

PS2:十分なポイントがないため、ビクターの回答にコメントとして追加することはできません。


3
問題:sencha cmdを使用しようとすると、1.7と1.8の問題に直面しました。解決策:%PATH%環境変数にjdk1.7 / binパスを追加し、c:/ windows / system32ディレクトリからjavaファイル(java.exe、javaw.exe、javaws.exe)を削除しました。問題は解決しました:)
saurabh 2014年

3
すべてが再び働いてしまっ取り出したら.. \ WINDOWS \ System32にジャワ* .exeファイル:\ WINDOWS \ SYSWOW64とX:全体のF ***問題がXだった
thiagoh

17

[スタート]メニューで「regedit」と入力して、レジストリエディターを開きます。

左側のレジストリエクスプローラー/ツリーメニューの「HKEY_LOCAL_MACHINE」に移動します

「HKEY_LOCAL_MACHINE」レジストリ内の「ソフトウェア」をクリックします

「ソフトウェア」レジストリ内の「JavaSoft」をクリックします

レジストリの「JavaSoft」リスト内の「Javaランタイム環境」をクリックすると、インストールされているJavaのさまざまなバージョンが表示されます。

「Javaランタイム環境」をクリックします。右側に4〜5行が表示されます。"CurrentVersion"を選択して右クリック(変更オプションを選択)バージョンを "1.7"に変更

これで魔法が完成しました


4

まだこのスレッドをフォローしている人がいるかどうかはわかりませんが、最近、ActiveMQ 5.10をWindowsサービスとして起動しようとしたときにこの問題が発生しました。

JAVA_HOMEパスが設定されていませんでした。Java 6とJava 7をインストールしましたが、デフォルトのバージョンはv7でした。(つまり、コマンドウィンドウを開いて「java -version」と入力した場合)。

これが手掛かりだったところです-"java -version"は "Java HotSpot(TM)64-Bit Server VM(build 23.1-b03、mixed mode)"を返しましたが、Win32サービスをインストールしていました...

Win32ラッパーを64ビットマシンで使用する場合、どういうわけかJavaの異なるバージョンを使用することにします...

したがって、私の修正は、32ビットバージョンのラッパーをアンインストールし、64ビットバージョンをインストールすることでした。私のマシンの嫌悪感。ただ癖だと思います...でも幸い私は最終的に問題を解決しました...


1
この問題は、32ビットと64ビットの両方のバージョンのJavaがインストールされており、自動(または私の場合は強制的な企業)更新でそのうちの1つだけが更新されている場合に発生する可能性があります。Javaのすべてのインスタンスをアンインストールし、32ビットと64ビットの両方を再インストールすると解決します。
DannyMeister 2014年

0

私のWin7の場合

Paradoxは、System32フォルダーのjava.exeおよびjavaw.exeでした。そのフォルダーを開くと、それらは表示されませんでしたが、スタートメニューの検索を使用して、それらのファイルへのリンクを取得し、それらを削除しました。次に、searshはJAVA_HOMEからのファイルへのリンクをくれました

マジック )


-1

正しいディレクトリに移動します。java.exeつまり、必要なJDKバージョンに移動します。java.exe

cd C:/Program Files/Java/jdk1.7.0_25/bin

java.exeこのディレクトリからを実行すると、レジストリや$ PATH設定よりも優先されます。

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 


-3

jarは1.6 準拠するようにコンパイルされています。そのため、このエラーが発生します。2つの解決策:
1)Java 1.6を使用します

または

2)ご使用の環境に準拠するようにjarを再コンパイルします 1.7


実際に両方を実行しましたが、少しバックアップさせてください。JARは実際にはC#GUIを介して実行されています。JAR自体はコマンドラインから実行されますが、GUIからは実行されません。私が実行しているJAR(GUIの実行に関して)内の別のJARである可能性があると考えています。これはそうなるのでしょうか?ネストされたJARファイルが1.6にコンパイルされたことは?
ブライアンA

これは信じられないように聞こえます。Javaバージョンには下位互換性があります。JDK 6で/用にコンパイルされたコードは、再コンパイルや変更を行わなくてもJava 7で動作します。
Jesper 2013年

@Jesper私はこれをEclipseでよく見られる同様の問題と混同している可能性があります。
Woot4Moo 2013年

1
@Jesperがこれがすべて私にとって意味をなさない理由です。私が見つけるすべては、1.5 JREを備えた1.6のような古いJavaで実行されているJARの新しいバージョンに関連しています。しかし、この問題は逆に思えます。
ブライアンA

-3

regeditを使用して、Java 7に対応するエントリを削除します。これは機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.