Kayıt Defteri Anahtarı '…', '1.7' değerine sahip, ancak '1.6' gerekiyor. Java 1.7 Yüklendi ve Kayıt Defteri Onu Gösteriyor


95

Geliştirme ekibim kısa süre önce, sunuculara tam erişimimiz olmayan bir uzaktan geliştirme ortamına zorlandı. Değişiklikten önce JRE 7 ile birlikte Java 1.7 x64 üzerinde sorunsuz çalışan bir JAR'ımız vardı. Yeni sunucuya geçtiğimizde JAR'ımız sorunsuz çalışıyordu, ancak sunucu yöneticilerimizden biri Java'mızı daha eski bir sürümle "güncelledi" sürümünü ve kullandığımız sürümü kaldırdı. Bana nedenini sorma, bilmiyorum. Java 1.7'yi yeniden yükledim ve 1.6'yı JRE'lerle birlikte kaldırdım.

Aşağıdaki sorun çalışma zamanında ortaya çıkar, derleme hatası yoktur:

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.

Dizüstü bilgisayarımda aynı JAR'ı sorunsuz bir şekilde çalıştırıyorum. Hem sunucu hem de dizüstü bilgisayarım, ilgili% HOME% değişkenlerinde ve sistem PATH'ında JDK 1.7 ve JRE 7'ye sahip. Hatta JRE 6'yı yeniden yükledim ve daha sonra aynı sonuca sahip sistem ortamı PATH değişkenlerine yerleştirdim.

Ayrıca, 1.6'ya bakmak için kayıt defterini geri değiştirdim ve aşağıdakilerle sonuçlandı;

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

Çeşitli forumlara baktığım için sahip olduğunuz her türlü görüşe minnettar olurum, ancak hiçbir şey tam olarak benim sorunuma sahip görünmüyor. Ayrıca bu, kullandığımız başka bir sunucuda da oldu. Teşekkürler!

Güncelleme: JAR'ı 1.6 veya 1.7'ye yeniden derlemede ve JDK ile eşleştirmede şans yok. Ayrıca, neden dünyada Java'nın daha yeni bir sürümü eski bir derlenmiş sürümü bozsun?

Yanıtlar:


159

Bu, bir şekilde java'nın kendisini karıştırdığınızda olur. JRE 7'yi bulduğu bir java 6 VM'yi çalıştırmaya çalışıyorsunuz. Yalnızca komut satırına javaveya java -versionyanlış yapılandırılmış bir ortamda yazsanız bile bu sorunu gösterebilir . JAR'daki kodun Windows Kayıt Defterinde aradığı pek olası olmayan durum dışında sorun JAR değildir (muhtemelen sizin durumunuz değildir).

Benim durumumda, ben java.exe, javaw.exeve javaws.exede Java 6 dan Windows/System32klasöründe (orada olmalı bilmiyorum). JDK ve JRE'nin geri kalanı içindeki PATH'de bulunur C:\Java\jdk_1.7.0\bin. Oops!


62
Aynı sorunla karşılaştı, ancak aynı kaldırıldıktan sonra Java 8 ile. Windows / System32'de bulunan java.exe, javaw.exe ve javaws.exe dosyasının silinmesi sorunu düzeltildi. Oraya nasıl geldiğini bilmesem bile gerçekten garip bir coz.
C Deepak

2
Bildirim için teşekkürler, yardımcı olur. Benim durumumda JDK 1.7 ve JDK 1.8.
Daoway

7
X86 Kişiler için !! İlk olarak 1.8 jre'yi birkaç ay önce kurdum ve 1.8 sdk istedim. java.exe, javaw.exeve javaws.exealtında saklanır Windows/SysWOW64. Ayrıca nedense 1.8 yüklü sdk yüklendiğinde java.exe, javaw.exeve javaws.exealtında C:/ProgramData/Oracle/Java/javapath. Nedenini bilmiyorum ama onları da sildim ve java -versionhala çalışıyor.
Aydınlık

1
System32 benim için anahtar oldu. Javapath'in doğru sürüme sahip olduğundan ve ortam değişkenlerimin düzgün ayarlandığından emin oldum ... bu System32 anlaşmasını düzeltene kadar hiçbir şey işe yaramadı. Hepsi aynı sayfada olmalı.
BK

2
indows / System32'de bulunan java.exe, javaw.exe ve javaws.exe'nin silinmesi sorunu benim için düzeltir. Teşekkürler @C Deepak
Tahir Jilani

59

Java 8'i (jdk & jre) zaten Java 7 çalıştıran bir sisteme yüklerken benzer bir hata oluştu.

Hata: Kayıt defteri anahtarı 'Software \ JavaSoft \ Java Runtime

'\ CurrentVersion' ortamı '1.8' değerine sahip, ancak '1.7' gerekiyor.

Hata: java.dll bulunamadı Hata: Java SE Çalışma Zamanı Ortamı bulunamadı.

Ortamım doğru bir şekilde kuruldu (Path & java_home doğru tanımlandı), ancak sorun, 8 öncesi Java yükleyicisinin çalışma biçiminden kaynaklanıyor, bu da üç yürütülebilir dosyayı (java.exe, javaw.exe ve javaws.exe) kopyalamak için kullandıkları ) Windows sistem dizinine. Yeni bir pre-8 kurulum tarafından üzerine yazılmadıkça bunlar kalır.

Ancak Java 8 yükleyici bunun yerine yeni bir dizinde, C: \ ProgramData \ Oracle \ Java \ javapath, gerçek JRE 8 konumuna işaret eden sembolik bağlantılar oluşturur.

Bu, aslında eski 7 exes'i çalıştıracağınız ancak yeni 8 DLL'leri kullanacağınız anlamına gelir.

Dolayısıyla, çözüm basitçe yukarıdaki 3 Java exes'i windows sistem dizininden silmektir.

64 bit Windows'ta 32 bit Java çalıştırıyorsanız, exes Windows \ SysWOW64'te, aksi takdirde Windows \ System32'de olur.


Bu çalışan bir çözüm, aynı sorunla karşılaştım ve bu sorunu çözdü.
Sagar D

Bu çok daha iyi bir çözüm ... en azından benim için. Teşekkürler.
cbmeeks

28

Windows / system32'deki java dosyalarını sildim ve ayrıca c: \ ProgramData \ Oracle \ Java \ javapath'ı PATH değişkeninden kaldırdım, çünkü java 1.8 dosyalarına 3 sembolik bağlantı vardı.

% JAVA_HOME% değişkeninde JDK 1.7 ve PATH'de java1.7 / bin vardı.

PS1: Sorunum Java 1.7 ve Java 1.8 arasındaydı.

PS2: Bunu Victor'un cevabına yorum olarak ekleyemem çünkü yeterince puanım yok.


3
Sorun: Sencha cmd'yi kullanmaya çalışırken 1.7 & 1.8 problemiyle karşılaştım. Çözüm:% PATH% ortam değişkenine jdk1.7 / bin yolunu ekledim ve java dosyalarını (java.exe, javaw.exe, javaws.exe) c: / windows / system32 dizininden kaldırdım. Sorun çözüldü :)
saurabh

3
tüm f *** sorunu X: \ Windows \ SysWOW64 ve X: \ Windows \ System32 java * .exe dosyalarıydı .. kaldırıldıktan sonra hepsi tekrar çalışmaya başladı ..
thiagoh

17

Kayıt düzenleyicisini açmak için BAŞLAT menüsünde "regedit" yazın

Sol taraftaki kayıt defteri gezgini / ağaç menüsünde "HKEY_LOCAL_MACHINE" seçeneğine gidin

"HKEY_LOCAL_MACHINE" kayıtlarında "YAZILIM" a tıklayın

"YAZILIM" kayıtlarında "JavaSoft" u tıklayın

"JavaSoft" kayıt listesi içinde "Java Runtime Environment" öğesini tıklayın, burada kurulu java'nın farklı sürümlerini görebilirsiniz

"Java Runtime Environment" öğesini tıklayın - Sağ tarafta 4-5 satır göreceksiniz. Lütfen "CurrentVersion" öğesini seçin ve sağ tıklayın (değiştir seçeneğini seçin) Sürümü "1.7" olarak değiştirin

Şimdi sihir tamamlandı


4

Hala bu konuyu takip eden var mı bilmiyorum, ancak son zamanlarda ActiveMQ 5.10'u bir Windows hizmeti olarak başlatmaya çalıştığımda bu sorunu yaşadım.

JAVA_HOME yol ayarım yoktu. Java 6 ve Java 7 yükledim, ancak varsayılan sürüm v7 idi. (yani bir komut penceresi açarsam ve "java-sürümü" yazarsam).

İpucu buradaydı - "java sürümü" "Java HotSpot (TM) 64-Bit Sunucu VM (derleme 23.1-b03, karma mod)" döndürdü, ancak Win32 hizmetini kurmuştum ...

64 bitlik bir makinede Win32 sarmalayıcısını kullanırsanız, bir şekilde farklı bir Java sürümü kullanmaya karar verir ...

Bu yüzden benim düzeltmem, sarmalayıcının 32 bit sürümünü kaldırmak ve 64 bit sürümünü kurmaktı. makinemden tiksinme; sadece alışkanlık sanırım ... Ama neyse ki sonunda sorunu çözdüm ...


1
Java'nın hem 32 hem de 64 bit sürümleri yüklüyse ve otomatik (veya benim durumumda zorunlu kurumsal) güncelleme yalnızca bunlardan birini güncellerse bu sorunla karşılaşabilirsiniz. Tüm Java örneklerini kaldırmak ve hem 32 hem de 64 bit'i yeniden yüklemek çözülür.
DannyMeister

0

Win7'm için

Paradox, System32 klasöründe java.exe ve javaw.exe olmaktaydı. Bu klasörü açarken göremedim ancak Başlat menüsünde aramayı kullanarak bu dosyalara bağlantılar alıyorum, onları kaldırıyorum. Sonraki araştırma bana JAVA_HOME'daki dosyaların bağlantılarını verdi

büyü)


-1

Doğru dizine değiştirin, java.exeyani gerekli JDK sürümüne gidinjava.exe

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

java.exeBu dizinden çalıştırın, kayıt defteri ve $ PATH ayarlarına göre önceliğe sahiptir.

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


-3

Kavanoz 1.6 uyumlu olması için derlendi . Bu nedenle bu hatayı alıyorsunuz. İki çözünürlük:
1) Java 1.6 kullanın

VEYA

2) Kavanozu ortamınızla uyumlu olacak şekilde yeniden derleyin 1.7


Aslında ikisini de yaptım ama biraz geriye gitmeme izin verin. JAR aslında bir C # GUI üzerinden çalıştırılıyor. JAR'ın kendisi komut satırı üzerinden çalışır, ancak GUI aracılığıyla çalışmaz. Çalıştırdığım JAR içinde başka bir JAR olabileceğini düşünüyorum (GUI'yi çalıştırmayla ilgili). O zaman durum bu olabilir mi? Yuvalanmış bir JAR dosyasının 1.6'ya derlendiğini mi?
Bryan A

Bu mantıksız geliyor. Java sürümleri aşağı doğru uyumludur; JDK 6 için / üzerinde derlenen kod, yeniden derleme veya değişiklik yapmadan Java 7 üzerinde çalışacaktır.
Jesper

@Jesper, bunu Eclipse'de sık gördüğüm benzer bir sorunla karıştırıyor olabilirim.
Woot4Moo

1
@Jesper bu yüzden bunların hepsi bana mantıklı gelmiyor. Bulduğum her şey, 1.5 JRE'ye sahip 1.6 gibi eski bir Java üzerinde çalışan bir JAR'ın yeni bir sürümüyle ilgili. Ancak bu sorun geriye doğru görünüyor.
Bryan A

-3

Regedit'i kullanarak java 7'ye karşılık gelen girdileri kaldırın. Çalışacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.