Klucz rejestru „…” ma wartość „1,7”, ale wymagana jest wartość „1,6”. Java 1.7 jest zainstalowana i Rejestr wskazuje na nią

95

Mój zespół programistów został ostatnio zmuszony do przeniesienia się do zdalnego środowiska programistycznego, w którym nie mamy pełnego dostępu do serwerów. Przed zmianą mieliśmy JAR, który działał dobrze na Javie 1.7 x64 razem z JRE 7. Kiedy przeszliśmy na nowy serwer, nasz JAR działał dobrze, ale potem jeden z administratorów serwera "zaktualizował" naszą Javę do starszej wersję i odinstalowałem ten, którego używaliśmy. Nie pytaj mnie dlaczego, nie wiem. Ponownie zainstalowałem Javę 1.7 i odinstalowałem 1.6 wraz ze środowiskami JRE.

Następujący problem występuje w czasie wykonywania, nie ma błędów kompilacji:

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.

Uruchomiłem ten sam plik JAR na moim laptopie bez żadnych problemów. Zarówno serwer, jak i mój laptop mają JDK 1.7 i JRE 7 w odpowiednich zmiennych% HOME% i ścieżce systemowej. Nawet ponownie zainstalowałem JRE 6 i umieściłem go później w zmiennych PATH środowiska systemowego z tym samym wynikiem.

Zmieniłem również rejestr z powrotem, aby spojrzeć na 1.6 i skutkuje to, co sprawdziłem i wydaje się, że jest to spowodowane posiadaniem wielu zainstalowanych Javas (co prowadzi do mojego pierwotnego problemu):

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

Byłbym wdzięczny za wszelkie spostrzeżenia, które wszyscy macie, ponieważ przeglądałem różne fora, ale nic nie wydaje się mieć dokładnie mojego problemu. Zdarzyło się to również na innym serwerze, którego używamy. Dzięki!

Aktualizacja: Nie udało się skompilować JAR do wersji 1.6 lub 1.7 i dopasować do JDK. Ponadto, dlaczego na świecie nowsza wersja Java miałaby zepsuć starszą, skompilowaną wersję?

Bryan A
źródło

Odpowiedzi:

159

Dzieje się tak, gdy w jakiś sposób pomylisz samą Javę. Próbujesz uruchomić maszynę wirtualną java 6, w której znalazła środowisko JRE 7. Ten problem może być widoczny nawet wtedy, gdy wpiszesz w wierszu poleceń tylko javalub java -versionw źle skonfigurowanym środowisku. JAR nie stanowi problemu, z wyjątkiem bardzo mało prawdopodobnego przypadku, gdy kod w pliku JAR szuka tego w rejestrze systemu Windows (co prawdopodobnie nie jest Twoim przypadkiem).

W moim przypadku, miałem java.exe, javaw.exea javaws.exeod Java 6 w Windows/System32folderze (nie wiem jak to ma tam być). Reszta JDK i JRE została znaleziona w PATH wewnątrz C:\Java\jdk_1.7.0\bin. Ups!

Victor Stafusa
źródło
62
Napotkano ten sam problem, ale z Javą 8 po odinstalowaniu tego samego. Naprawiono problem przez usunięcie java.exe, javaw.exe i javaws.exe obecnych w Windows / System32. Naprawdę dziwne, bo nawet ja nie wiem, jak to się tam dostało.
C Deepak,
2
Dzięki za powiadomienie, to pomaga. JDK 1.7 vs JDK 1.8 w moim przypadku.
dzień
7
Dla osób x86 !! Pierwotnie zainstalowałem 1.8 jre kilka miesięcy temu i chciałem 1.8 sdk. java.exe, javaw.exei javaws.exejest przechowywany pod Windows/SysWOW64. Również z jakiegoś powodu po zainstalowaniu 1.8 SDK jest zainstalowany java.exe, javaw.exei javaws.exepod C:/ProgramData/Oracle/Java/javapath. Nie wiem dlaczego, ale je również java -versionusunąłem i nadal działa.
Luminous
1
System32 był dla mnie kluczem. Upewniłem się, że javapath ma odpowiednią wersję, a moje zmienne środowiskowe są poprawnie ustawione ... nic nie działało, dopóki nie naprawiłem tej umowy System32. Wszystko musi być na tej samej stronie.
BK,
2
Usunięcie java.exe, javaw.exe i javaws.exe obecnych w indows / System32 rozwiązuje problem. Dzięki @C Deepak
Tahir Jilani
59

Po prostu wystąpił podobny błąd podczas instalowania Java 8 (jdk i jre) w systemie, w którym jest już uruchomiona Java 7.

Błąd: klucz rejestru „Software \ JavaSoft \ Java Runtime

Środowisko „\ CurrentVersion” ma wartość „1,8”, ale wymagana jest wartość „1,7”.

Błąd: nie można znaleźć pliku java.dll Błąd: nie można znaleźć środowiska wykonawczego Java SE.

Moje środowisko zostało poprawnie skonfigurowane (ścieżka i java_home zostały poprawnie zdefiniowane), ale problem wynika ze sposobu, w jaki działały instalatory Java z wersji wcześniejszych niż 8, czyli użyły do ​​skopiowania trzech plików wykonywalnych (java.exe, javaw.exe i javaws.exe ) do katalogu systemowego Windows. Pozostają, chyba że zostaną nadpisane przez nową instalację w wersji starszej niż 8.

Jednak zamiast tego instalator Java 8 tworzy dowiązania symboliczne w nowym katalogu, C: \ ProgramData \ Oracle \ Java \ javapath, wskazując rzeczywistą lokalizację środowiska JRE 8.

Oznacza to, że faktycznie uruchomisz stare 7 exe, ale użyjesz nowych 8 DLL.

Tak więc rozwiązaniem jest po prostu usunięcie 3 plików exe Java, jak powyżej, z katalogu systemowego Windows.

Jeśli używasz 32-bitowej Javy w 64-bitowym systemie Windows, pliki exe znajdowałyby się w Windows \ SysWOW64, w przeciwnym razie w Windows \ System32.

Jool
źródło
To działa rozwiązanie, napotkałem ten sam problem i to go rozwiązało.
Sagar D
To dużo lepsze rozwiązanie ... przynajmniej dla mnie. Dzięki.
cbmeeks
28

Usunąłem pliki java w windows / system32, a także usunąłem c: \ ProgramData \ Oracle \ Java \ javapath ze zmiennej PATH, ponieważ były 3 dowiązania symboliczne do plików Java 1.8.

Miałem JDK 1.7 w zmiennej% JAVA_HOME% i java1.7 / bin w PATH.

PS1: Mój problem dotyczył języka Java 1.7 i Java 1.8.

PS2: Nie mogę dodać tego jako komentarza do odpowiedzi Victora, ponieważ nie mam wystarczającej liczby punktów.

Jose Ignacio Centeno
źródło
3
Problem: Napotkałem problem 1.7 i 1.8 podczas próby użycia polecenia sencha cmd. Rozwiązanie: Dodałem ścieżkę jdk1.7 / bin w zmiennej środowiskowej% PATH% i usunąłem pliki java (java.exe, javaw.exe, javaws.exe) z katalogu c: / windows / system32. Problem został rozwiązany :)
saurabh
3
cały problem f *** dotyczył plików X: \ Windows \ SysWOW64 i X: \ Windows \ System32 java * .exe .. po usunięciu wszystko znów działało ..
thiagoh
17

W menu START wpisz „regedit”, aby otworzyć edytor rejestru

Przejdź do „HKEY_LOCAL_MACHINE” w menu eksploratora rejestru / drzewa po lewej stronie

Kliknij „OPROGRAMOWANIE” w rejestrach „HKEY_LOCAL_MACHINE”

Kliknij „JavaSoft” w rejestrach „OPROGRAMOWANIE”

Kliknij "Java Runtime Environment" na liście rejestrów "JavaSoft" Tutaj możesz zobaczyć różne wersje zainstalowanej javy

Kliknij „Java Runtime Environment” - po prawej stronie pojawi się 4-5 wierszy. Wybierz „CurrentVersion” i kliknij prawym przyciskiem myszy (wybierz opcję modyfikacji) Zmień wersję na „1.7”

Teraz magia została zakończona

satender
źródło
4

Nie wiem, czy ktoś nadal śledzi ten wątek, ale ostatnio miałem ten problem, gdy próbowałem uruchomić ActiveMQ 5.10 jako usługę Windows.

Nie miałem ustawionej ścieżki JAVA_HOME. Miałem zainstalowane Java 6 i Java 7, ale domyślna wersja to v7. (tj. jeśli otworzyłem okno poleceń i wpisałem „java -version”).

Oto gdzie znalazła się wskazówka - „java -version” zwróciła „Java HotSpot (TM) 64-bitowa maszyna wirtualna serwera (wersja 23.1-b03, tryb mieszany)”, ale została zainstalowana usługa Win32 ...

Okazuje się, że jeśli używasz wrappera Win32 na maszynie 64-bitowej to w jakiś sposób decyduje się na użycie innej wersji Javy ...

Więc moją poprawką było odinstalowanie 32-bitowej wersji opakowania i zainstalowanie wersji 64-bitowej. niechęć do mojego komputera; chyba tylko nawyk ... Ale na szczęście w końcu rozwiązałem problem ...

James Joyce
źródło
1
Możesz napotkać ten problem, jeśli masz zainstalowaną zarówno 32, jak i 64-bitową wersję Javy, a automatyczna (lub w moim przypadku wymuszona korporacyjna) aktualizacja aktualizuje tylko 1 z nich. Rozwiązanie problemu rozwiąże odinstalowanie wszystkich wystąpień oprogramowania Java i ponowna instalacja wersji 32- i 64-bitowej.
DannyMeister
0

Dla mojego Win7

Paradox był w byciu java.exe i javaw.exe w folderze System32. Otwierając ten folder, nie widziałem ich, ale używając wyszukiwania w menu Start, dostaję linki do tych plików, usunąłem je. Następne wyszukiwanie dało mi linki do plików z JAVA_HOME

magia )

Ihar Yudziankou
źródło
-1

Przejdź do katalogu z poprawną, java.exetzn. Przejdź do wymaganej wersji JDKjava.exe

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

Uruchom java.exez tego katalogu, ma pierwszeństwo przed ustawieniami rejestru i $ PATH.

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 
Barun
źródło
-2

Rozwiązałem ten problem, odinstalowując Javę 1.8

Iman Marashi
źródło
-3

Jar został skompilowany w celu zapewnienia 1.6 zgodności. Dlatego otrzymujesz ten błąd. Dwie rozdzielczości:
1) Użyj Java 1.6

LUB

2) Ponownie skompiluj jar, aby był zgodny z Twoim środowiskiem 1.7

Woot4Moo
źródło
Właściwie zrobiłem jedno i drugie, ale cofnę się trochę. Plik JAR jest aktualnie uruchamiany przez GUI języka C #. Sam plik JAR przechodzi przez wiersz poleceń, ale nie przez GUI. Myślę, że może to być inny plik JAR w JAR, który uruchamiam (odnoszący się do uruchamiania GUI). Czy to może tak być? Że zagnieżdżony plik JAR został skompilowany do wersji 1.6?
Bryan A,
Brzmi to nieprawdopodobnie. Wersje Java są kompatybilne wstecz; kod skompilowany dla / na JDK 6 będzie działał na Javie 7 bez ponownej kompilacji lub modyfikacji.
Jesper
@Jesper Mogę to mylić z podobnym problemem, który często widzę w Eclipse.
Woot4Moo
1
@Jesper, dlatego to wszystko nie ma dla mnie sensu. Wszystko, co znajduję, jest związane z nową wersją JAR-a działającego na starej Javie, takiej jak 1.6, z 1.5 JRE. Ale ten problem wydaje się odwrotny.
Bryan A
-3

Używając regedit, usuń wpisy odpowiadające java 7. To zadziała.

Oliwa
źródło