96

私の開発チームは最近、サーバーへの完全なアクセス権を持たないリモート開発環境に移動することを余儀なくされました。変更前は、Java 1.7 x64 と JRE 7 で正常に動作する 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 が古いコンパイル済みバージョンを壊すのでしょうか?

4

10 に答える 10

160

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

私の場合、java.exeフォルダに Java 6 の と がありましたjavaw.exe(どうやってそこにあるのかわかりません)。JDK および JRE の残りの部分は、 内の PATH にあります。おっとっと!javaws.exeWindows/System32C:\Java\jdk_1.7.0\bin

于 2013-09-21T01:54:21.603 に答える
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 インストーラーの動作方法に問題があり、3 つの実行可能ファイル (java.exe、javaw.exe、javaws.exe) をコピーしていました。 ) を 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 にあります。

于 2015-01-03T15:37:09.660 に答える
28

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

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

PS1: 私の問題は Java 1.7 と Java 1.8 の間にありました。

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

于 2014-09-22T17:18:33.633 に答える
-2

Java 1.8をアンインストールすることでこの問題を解決しました

于 2015-05-10T20:00:16.750 に答える