Registry Key '…' memiliki nilai '1.7', tetapi '1.6' diperlukan. Java 1.7 Diinstal dan Registry Menunjuknya

95

Tim pengembangan saya baru-baru ini dipaksa pindah ke lingkungan pengembangan jarak jauh di mana kami tidak memiliki akses penuh ke server. Sebelum perubahan selesai, kami memiliki JAR yang berfungsi dengan baik di Java 1.7 x64 bersama dengan JRE 7. Ketika kami pindah ke server baru JAR kami berjalan dengan baik, tetapi kemudian salah satu admin server "memperbarui" Java kami ke yang lebih lama versi dan mencopot pemasangan yang kami gunakan. Jangan tanya saya kenapa, saya tidak tahu. Saya menginstal ulang Java 1.7 dan menghapus 1.6 bersama dengan JRE.

Masalah berikut ini terjadi saat runtime, tidak ada kesalahan versi:

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.

Saya telah menjalankan JAR yang sama di laptop saya tanpa masalah. Baik server dan laptop saya memiliki JDK 1.7 dan JRE 7 di masing-masing variabel% HOME% dan PATH sistem. Saya bahkan telah menginstal ulang JRE 6 dan menempatkannya kemudian di variabel PATH lingkungan sistem dengan hasil yang sama.

Saya juga telah mengubah registri kembali untuk melihat 1.6 dan hasilnya sebagai berikut, yang saya cari dan tampaknya dari menginstal beberapa Javas (mengarah kembali ke masalah awal saya):

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

Saya akan menghargai setiap wawasan yang Anda semua miliki karena saya telah melihat-lihat berbagai forum tetapi sepertinya tidak ada yang benar-benar menjadi masalah saya. Juga, ini telah terjadi di server lain yang kami gunakan juga. Terima kasih!

Pembaruan: Tidak beruntung dengan mengkompilasi ulang JAR menjadi 1.6 atau 1.7 dan mencocokkan JDK. Juga, mengapa di dunia ini versi Java yang lebih baru merusak versi terkompilasi yang lebih lama?

Bryan A
sumber

Jawaban:

159

Ini terjadi ketika Anda entah bagaimana bingung dengan java itu sendiri. Anda mencoba menjalankan java 6 VM di mana ia menemukan JRE 7. Masalah ini mungkin muncul meskipun Anda mengetik di baris perintah saja javaatau java -versiondi lingkungan yang salah konfigurasi. JAR bukanlah masalahnya, kecuali dalam kasus yang sangat tidak mungkin di mana kode di JAR mencari di Registry Windows untuk itu (yang mungkin bukan kasus Anda).

Dalam kasus saya, saya memiliki java.exe, javaw.exedan javaws.exedari Java 6 di Windows/System32folder (tidak tahu bagaimana itu bisa ada di sana). Sisa JDK dan JRE ditemukan di dalam PATHC:\Java\jdk_1.7.0\bin . Ups!

Victor Stafusa
sumber
62
Menghadapi masalah yang sama tetapi dengan Java 8 setelah menghapus instalan yang sama. Memperbaiki masalah dengan menghapus java.exe, javaw.exe, dan javaws.exe yang ada di Windows / System32. Benar-benar aneh karena bahkan saya tidak tahu bagaimana itu sampai di sana.
C Deepak
2
Terima kasih atas pemberitahuannya, ini membantu. JDK 1.7 vs JDK 1.8 dalam kasus saya.
daoway
7
Untuk x86 People !! Saya awalnya menginstal 1,8 jre beberapa bulan yang lalu dan menginginkan 1,8 sdk. java.exe,, javaw.exedan javaws.exedisimpan di Windows/SysWOW64. Juga untuk beberapa alasan ketika saya menginstal 1,8 SDK terinstal java.exe, javaw.exedan javaws.exedi bawah C:/ProgramData/Oracle/Java/javapath. Tidak tahu mengapa, tapi saya menghapusnya juga dan java -versionmasih berfungsi.
Bercahaya
1
System32 adalah kunci bagi saya. Saya telah memastikan bahwa javapath memiliki versi yang benar dan variabel lingkungan saya diatur dengan benar ... tidak ada yang berhasil sampai saya memperbaiki kesepakatan System32 itu. Semuanya harus ada di halaman yang sama.
BK
2
menghapus java.exe, javaw.exe dan javaws.exe yang ada di indows / System32 memperbaiki masalah untuk saya. Terima kasih @C Deepak
Tahir Jilani
59

Baru saja mengalami kesalahan serupa saat menginstal java 8 (jdk & jre) pada sistem yang sudah menjalankan Java 7.

Kesalahan: Kunci registri 'Software \ JavaSoft \ Java Runtime

Lingkungan '\ CurrentVersion' memiliki nilai '1.8', tetapi '1.7' diperlukan.

Kesalahan: tidak dapat menemukan java.dll Kesalahan: Tidak dapat menemukan Java SE Runtime Environment.

Lingkungan saya telah diatur dengan benar (Path & java_home didefinisikan dengan benar), tetapi masalah muncul dari cara kerja installer Java pra-8, yaitu mereka biasa menyalin tiga executable (java.exe, javaw.exe & javaws.exe ) ke direktori sistem Windows. Ini tetap ada kecuali ditimpa oleh instalasi pra-8 yang baru.

Namun penginstal Java 8 malah membuat tautan simbolis di direktori baru, C: \ ProgramData \ Oracle \ Java \ javapath, menunjuk ke lokasi JRE 8 yang sebenarnya.

Ini berarti Anda benar-benar akan menjalankan 7 mantan tetapi menggunakan 8 DLL baru.

Jadi, solusinya cukup dengan menghapus 3 exes Java, seperti di atas, dari direktori sistem windows.

Jika Anda menjalankan Java 32-bit pada Windows 64-bit, exesnya ada di Windows \ SysWOW64, sebaliknya di Windows \ System32.

Jool
sumber
Ini adalah solusi yang berfungsi, saya menghadapi masalah yang sama dan ini menyelesaikannya.
Sagar D
Ini adalah solusi yang jauh lebih baik ... setidaknya untuk saya. Terima kasih.
cbmeeks
28

Saya telah menghapus file java di windows / system32 dan saya juga telah menghapus c: \ ProgramData \ Oracle \ Java \ javapath dari variabel PATH, karena ada 3 symlink ke file java 1.8.

Saya memiliki JDK 1.7 di variabel% JAVA_HOME% dan java1.7 / bin di PATH.

PS1: Masalah saya adalah antara Java 1.7 dan Java 1.8.

PS2: Saya tidak dapat menambahkan ini sebagai komentar pada jawaban Victor karena saya tidak memiliki cukup poin.

Jose Ignacio Centeno
sumber
3
Masalah: Saya menghadapi masalah 1.7 & 1.8 saat mencoba menggunakan sencha cmd. Solusi: Saya menambahkan jalur jdk1.7 / bin di variabel lingkungan% PATH% & menghapus file java (java.exe, javaw.exe, javaws.exe) dari direktori c: / windows / system32. Masalahnya teratasi :)
saurabh
3
Seluruh masalah sialan itu adalah file X: \ Windows \ SysWOW64 dan X: \ Windows \ System32 java * .exe .. setelah dihapus semuanya berfungsi kembali ..
thiagoh
17

Di menu MULAI ketik "regedit" untuk membuka editor Registri

Buka "HKEY_LOCAL_MACHINE" di sisi kiri menu registry explorer / tree

Klik "PERANGKAT LUNAK" dalam pendaftar "HKEY_LOCAL_MACHINE"

Klik "JavaSoft" dalam registri "PERANGKAT LUNAK"

Klik "Java Runtime Environment" dalam daftar "JavaSoft" di sini Anda dapat melihat berbagai versi java yang diinstal

Klik "Java Runtime Environment" - Di sisi kanan Anda akan mendapatkan 4-5 baris. Silakan pilih "CurrentVersion" dan Klik kanan (pilih opsi ubah) Ubah versi ke "1.7"

Sekarang keajaiban telah selesai

satender
sumber
4

Saya tidak tahu apakah ada yang masih mengikuti utas ini, tetapi saya baru-baru ini mengalami masalah ini ketika mencoba meluncurkan ActiveMQ 5.10 sebagai layanan Windows.

Saya tidak menyetel jalur JAVA_HOME. Saya telah menginstal Java 6 dan Java 7, tetapi versi defaultnya adalah v7. (yaitu jika saya membuka jendela perintah dan mengetik "java -version").

Di sinilah petunjuknya - "java -version" mengembalikan "Server VM Java HotSpot (TM) 64-Bit (build 23.1-b03, mode campuran)" tetapi saya telah menginstal layanan Win32 ...

Ternyata jika Anda menggunakan pembungkus Win32 pada mesin 64-bit, ia entah bagaimana memutuskan untuk menggunakan versi Java yang berbeda ...

Jadi perbaikan saya adalah mencopot pemasangan versi 32-bit dari pembungkus dan menginstal versi 64-bit. keengganan pada mesin saya; hanya kebiasaan saya kira ... Tapi untungnya saya menyelesaikan masalah ini pada akhirnya ...

James Joyce
sumber
1
Anda dapat mengalami masalah ini jika Anda menginstal Java versi 32 dan 64 bit, dan pembaruan otomatis (atau dalam kasus saya memaksa perusahaan) hanya memperbarui salah satunya. Menghapus semua instalan Java dan menginstal ulang 32 dan 64 bit akan menyelesaikannya.
DannyMeister
0

Untuk Win7 saya

Paradox adalah java.exe dan javaw.exe di folder System32. Membuka folder itu saya tidak dapat melihatnya tetapi menggunakan pencarian di menu Mulai saya mendapatkan tautan ke file-file itu, menghapusnya. Searsh berikutnya memberi saya tautan ke file dari JAVA_HOME

sihir)

Ihar Yudziankou
sumber
-1

Ubah ke direktori dengan benar java.exeyaitu pergi ke versi JDK yang diperlukanjava.exe

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

Jalankan java.exedari direktori ini, ini lebih diutamakan daripada pengaturan registri dan $ PATH.

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

Saya memecahkan masalah ini dengan menghapus Java 1.8

Iman Marashi
sumber
-3

Stoples itu disusun agar 1.6 sesuai. Itulah mengapa Anda mendapatkan kesalahan ini. Dua resolusi:
1) Gunakan Java 1.6

ATAU

2) Kompilasi ulang toples agar sesuai dengan lingkungan Anda 1.7

Woot4Moo
sumber
Saya sebenarnya telah melakukan keduanya, tapi izinkan saya mundur sedikit. JAR sebenarnya dijalankan melalui C # GUI. JAR itu sendiri berjalan melalui baris perintah, tetapi tidak melalui GUI. Saya pikir ini mungkin JAR lain dalam JAR yang saya jalankan (berkaitan dengan menjalankan GUI). Mungkinkah ini masalahnya? Bahwa file JAR bersarang telah dikompilasi menjadi 1.6?
Bryan A
Ini terdengar tidak masuk akal. Versi Java kompatibel ke bawah; kode yang dikompilasi untuk / pada JDK 6 akan bekerja pada Java 7 tanpa kompilasi ulang atau modifikasi.
Jesper
@Jesper Saya mungkin mengacaukan ini dengan masalah serupa yang sering saya lihat di Eclipse.
Woot4Moo
1
@Jesper itulah sebabnya semua ini tidak masuk akal bagi saya. Semua yang saya temukan terkait dengan versi baru JAR yang berjalan pada Java lama seperti 1.6 dengan 1.5 JRE. Tapi masalah ini sepertinya mundur.
Bryan A
-3

Menggunakan regedit, hapus entri yang sesuai dengan java 7. Ini akan berhasil.

Zaitun
sumber