web-dev-qa-db-ja.com

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

私の開発チームは最近、サーバーに完全にアクセスできないリモート開発環境に追い込まれました。変更前は、JRE 7とともにJava 1.7 x64で正常に実行されていたJARがありました。新しいサーバーに移動すると、JARは正常に実行されましたが、サーバー管理者の1人がJavaを古いバージョンにアップグレードし、使用していたバージョンをアンインストールしました。理由は聞かないでください、わかりません。 JREとともにJava 1.7を再インストールし、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が古いコンパイル済みバージョンを壊すのでしょうか?

95
notsodev

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

私の場合、Java.exeフォルダーにJava 6からのjavaw.exejavaws.exeWindows/System32がありました(どうやってそこにたどり着いたのかわかりません)。 C:\Java\jdk_1.7.0\bin内のPATHにある残りのJDKおよびJRE。おっとっと!

159
Victor Stafusa

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

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

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

エラー:Java.dllエラーが見つかりませんでしたエラー:Java SE Runtime Environmentが見つかりませんでした。

私の環境は正しく設定されています(パスとJava_homeは正しく定義されています)が、問題は8より前のJavaインストーラーの動作、つまり3つの実行可能ファイル(Java.exe、javaw .exe&javaws.exe)をWindowsシステムディレクトリに追加します。これらは、新しい8以前のインストールによって上書きされない限り残ります。

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

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

そのため、上記のように、Windowsシステムディレクトリから3 Java exeを削除するだけです。

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

59
Jool

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

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

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

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

28

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

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

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

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

レジストリの「JavaSoft」リスト内の「Java Runtime Environment」をクリックすると、インストールされているJavaの異なるバージョンが表示されます

[Java Runtime Environment]をクリックします。右側に4〜5行表示されます。 「CurrentVersion」を選択し、右クリック(変更オプションを選択)バージョンを「1.7」に変更してください

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

17
satender

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

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

これが手掛かりでした-「Java -version」は「Java HotSpot(TM)64-Bit Server VM(ビルド23.1-b03、混合モード)」を返しましたが、Win32サービスをインストールしていました。 。

64ビットマシンでWin32ラッパーを使用すると、何らかの形でJavaの異なるバージョンを使用することになります...

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

4
James Joyce

私のWin7のために

ParadoxはSystem32フォルダーのJava.exeおよびjavaw.exeでした。そのフォルダーを開くと、それらを見ることができませんでしたが、[スタート]メニューの検索を使用して、それらのファイルへのリンクを取得し、それらを削除しました。次に、searshはJava_HOMEのファイルへのリンクをくれました

魔法 )

0
Ihar Yudziankou