私の開発チームは最近、サーバーに完全にアクセスできないリモート開発環境に追い込まれました。変更前は、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が古いコンパイル済みバージョンを壊すのでしょうか?
これは、Java自体を何らかの方法で混乱させた場合に発生します。 JRE 7が見つかったJava 6 VMを実行しようとしています。誤って設定された環境でJava
またはJava -version
だけをコマンドラインに入力しても、この問題が発生する場合があります。 JARのコードがそのためにWindowsレジストリを検索するという非常にまれなケースを除き、JARは問題ではありません(おそらくあなたのケースではありません)。
私の場合、Java.exe
フォルダーにJava 6からのjavaw.exe
、javaws.exe
、Windows/System32
がありました(どうやってそこにたどり着いたのかわかりません)。 C:\Java\jdk_1.7.0\bin
内のPATHにある残りのJDKおよびJRE。おっとっと!
既に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にあります。
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:十分なポイントがないため、これをビクターの答えにコメントとして追加することはできません。
[スタート]メニューに「regedit」と入力して、レジストリエディターを開きます。
左側のレジストリエクスプローラ/ツリーメニューの「HKEY_LOCAL_MACHINE」に移動します
「HKEY_LOCAL_MACHINE」レジストリ内の「ソフトウェア」をクリックします
「ソフトウェア」レジストリ内の「JavaSoft」をクリックします
レジストリの「JavaSoft」リスト内の「Java Runtime Environment」をクリックすると、インストールされているJavaの異なるバージョンが表示されます
[Java Runtime Environment]をクリックします。右側に4〜5行表示されます。 「CurrentVersion」を選択し、右クリック(変更オプションを選択)バージョンを「1.7」に変更してください
これで魔法が完成しました
誰かがまだこのスレッドをフォローしているかどうかはわかりませんが、最近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ビットバージョンをインストールすることでした。私のマシンの嫌悪感。ただの習慣...でも幸運なことに、私は最終的に問題を解決しました...
私のWin7のために
ParadoxはSystem32フォルダーのJava.exeおよびjavaw.exeでした。そのフォルダーを開くと、それらを見ることができませんでしたが、[スタート]メニューの検索を使用して、それらのファイルへのリンクを取得し、それらを削除しました。次に、searshはJava_HOMEのファイルへのリンクをくれました
魔法 )