Der Registrierungsschlüssel '…' hat den Wert '1.7', aber '1.6' ist erforderlich. Java 1.7 ist installiert und die Registrierung zeigt darauf

95

Mein Entwicklungsteam wurde kürzlich in eine Remote-Entwicklungsumgebung versetzt, in der wir keinen vollständigen Zugriff auf die Server haben. Vor der Umstellung hatten wir eine JAR, die unter Java 1.7 x64 zusammen mit JRE 7 einwandfrei lief. Als wir auf den neuen Server umgestiegen sind, lief unsere JAR in Ordnung, aber dann "aktualisierte" einer der Serveradministratoren unser Java auf ein älteres Version und deinstallierte die von uns verwendete. Frag mich nicht warum, ich weiß es nicht. Ich habe Java 1.7 neu installiert und 1.6 zusammen mit den JREs deinstalliert.

Das folgende Problem tritt zur Laufzeit auf, es liegen keine Buildfehler vor:

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.

Ich habe dieselbe JAR auf meinem Laptop ohne Probleme ausgeführt. Sowohl der Server als auch mein Laptop haben JDK 1.7 und JRE 7 in den jeweiligen% HOME% -Variablen und im Systempfad. Ich habe sogar JRE 6 neu installiert und später mit dem gleichen Ergebnis in die PATH-Variablen der Systemumgebung eingefügt.

Ich habe auch die Registrierung wieder auf 1.6 geändert und es ergibt sich Folgendes, das ich nachgeschlagen habe und das anscheinend darauf zurückzuführen ist, dass mehrere Javas installiert sind (was zu meinem ursprünglichen Problem zurückführt):

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

Ich würde mich über jeden Einblick freuen, den Sie alle haben, da ich verschiedene Foren durchgesehen habe, aber nichts scheint genau mein Problem zu haben. Dies ist auch auf einem anderen Server geschehen, den wir ebenfalls verwenden. Vielen Dank!

Update: Kein Glück, die JAR auf 1.6 oder 1.7 neu zu kompilieren und mit dem JDK übereinzustimmen. Warum in aller Welt würde eine neuere Version von Java eine ältere kompilierte Version beschädigen?

Bryan A.
quelle

Antworten:

159

Dies passiert, wenn Sie Java selbst irgendwie verwirrt haben. Sie versuchen, eine Java 6-VM auszuführen, auf der eine JRE 7 gefunden wurde. Dieses Problem wird möglicherweise angezeigt, selbst wenn Sie die Befehlszeile nur javaoder java -versionin einer falsch konfigurierten Umgebung eingeben. Die JAR ist nicht das Problem, außer in dem sehr unwahrscheinlichen Fall, dass der Code in der JAR in der Windows-Registrierung danach sucht (was wahrscheinlich nicht Ihr Fall ist).

In meinem Fall hatte ich das java.exe, javaw.exeund javaws.exevon Java 6 in dem Windows/System32Ordner (weiß nicht, wie es dort zu sein bekam). Der Rest des JDK und JRE befand sich im PATH im Inneren C:\Java\jdk_1.7.0\bin. Hoppla!

Victor Stafusa
quelle
62
Konnte das gleiche Problem, aber mit Java 8 nach der Deinstallation gleichen. Problem durch Löschen von java.exe, javaw.exe und javaws.exe in Windows / System32 behoben. Wirklich seltsam, denn selbst ich weiß nicht, wie es dahin gekommen ist.
C Deepak
2
Vielen Dank für die Benachrichtigung, es hilft. JDK 1.7 vs JDK 1.8 in meinem Fall.
Tag
7
Für x86 Leute !! Ich habe die 1.8 jre ursprünglich vor ein paar Monaten installiert und wollte 1.8 sdk. java.exe, javaw.exeUnd javaws.exewird gespeichert unter Windows/SysWOW64. Auch aus irgendeinem Grund, als ich das 1.8 SDK installierte java.exe, installierte es javaw.exeund javaws.exedarunter C:/ProgramData/Oracle/Java/javapath. Ich weiß nicht warum, aber ich habe sie auch gelöscht und java -versionfunktioniert immer noch.
Leuchtender
1
System32 war der Schlüssel für mich. Ich habe sichergestellt, dass Javapath die richtige Version hat und meine Umgebungsvariablen richtig eingestellt sind ... nichts hat funktioniert, bis ich diesen System32-Deal behoben habe. Es muss alles auf derselben Seite sein.
BK
2
Das Löschen von java.exe, javaw.exe und javaws.exe in indows / System32 behebt das Problem für mich. Vielen Dank @C Deepak
Tahir Jilani
59

Hatte gerade den ähnlichen Fehler bei der Installation von Java 8 (jdk & jre) auf einem System, auf dem bereits Java 7 ausgeführt wird.

Fehler: Registrierungsschlüssel 'Software \ JavaSoft \ Java Runtime

Die Umgebung '\ CurrentVersion' hat den Wert '1.8', aber '1.7' ist erforderlich.

Fehler: java.dll konnte nicht gefunden werden Fehler: Java SE Runtime Environment konnte nicht gefunden werden.

Meine Umgebung wurde korrekt eingerichtet (Pfad & java_home korrekt definiert), aber das Problem ergibt sich aus der Funktionsweise von Java-Installationsprogrammen vor 8, dh dem Kopieren der drei ausführbaren Dateien (java.exe, javaw.exe & javaws.exe) ) in das Windows-Systemverzeichnis. Diese bleiben erhalten, sofern sie nicht durch eine neue Installation vor 8 überschrieben werden.

Das Java 8-Installationsprogramm erstellt jedoch stattdessen symbolische Links in einem neuen Verzeichnis, C: \ ProgramData \ Oracle \ Java \ javapath, das auf den tatsächlichen JRE 8-Speicherort verweist.

Dies bedeutet, dass Sie tatsächlich die alten 7 Exes ausführen, aber die neuen 8 DLLs verwenden.

Die Lösung besteht also einfach darin, die 3 Java-Exes wie oben aus dem Windows-Systemverzeichnis zu löschen.

Wenn Sie 32-Bit-Java unter 64-Bit-Windows ausführen, befinden sich die Exes in Windows \ SysWOW64, andernfalls in Windows \ System32.

Jool
quelle
Dies ist eine funktionierende Lösung, ich hatte das gleiche Problem und dies löste es.
Sagar D
Dies ist eine viel bessere Lösung ... zumindest für mich. Vielen Dank.
cbmeeks
28

Ich habe Java-Dateien unter Windows / System32 gelöscht und auch c: \ ProgramData \ Oracle \ Java \ javapath aus der PATH-Variablen entfernt, da es 3 Symlinks zu Java 1.8-Dateien gab.

Ich hatte JDK 1.7 in der Variablen% JAVA_HOME% und java1.7 / bin im PATH.

PS1: Mein Problem war zwischen Java 1.7 und Java 1.8.

PS2: Ich kann dies nicht als Kommentar zu Victors Antwort hinzufügen, weil ich nicht genug Punkte habe.

Jose Ignacio Centeno
quelle
3
Problem: Beim Versuch, sencha cmd zu verwenden, trat ein Problem mit 1,7 und 1,8 auf. Lösung: Ich habe den Pfad jdk1.7 / bin in der Umgebungsvariablen% PATH% hinzugefügt und Java-Dateien (java.exe, javaw.exe, javaws.exe) aus dem Verzeichnis c: / windows / system32 entfernt. Das Problem wurde behoben :)
Saurabh
3
Das ganze Problem war, dass die Java * .exe-Dateien X: \ Windows \ SysWOW64 und X: \ Windows \ System32 .. einmal entfernt alle wieder funktionierten ..
Thiagoh
17

Geben Sie im Menü START "regedit" ein, um den Registrierungseditor zu öffnen

Gehen Sie zu "HKEY_LOCAL_MACHINE" im linken Registrierungs-Explorer / Baum-Menü

Klicken Sie in den Registern "HKEY_LOCAL_MACHINE" auf "SOFTWARE"

Klicken Sie in den "SOFTWARE" -Registern auf "JavaSoft"

Klicken Sie in der "JavaSoft" -Liste der Registrierungen auf "Java Runtime Environment". Hier sehen Sie verschiedene Versionen von installiertem Java

Klicken Sie auf "Java Runtime Environment" - Auf der rechten Seite erhalten Sie 4-5 Zeilen. Bitte wählen Sie "CurrentVersion" und klicken Sie mit der rechten Maustaste (Option "Ändern" auswählen). Ändern Sie die Version in "1.7".

Jetzt ist die Magie abgeschlossen

Satender
quelle
4

Ich weiß nicht, ob noch jemand diesem Thread folgt, aber ich hatte kürzlich dieses Problem, als ich versuchte, ActiveMQ 5.10 als Windows-Dienst zu starten.

Ich hatte keinen JAVA_HOME-Pfad festgelegt. Ich hatte Java 6 und Java 7 installiert, aber die Standardversion war v7. (dh wenn ich ein Befehlsfenster geöffnet habe und "java -version" eingebe).

Hier war der Hinweis - "Java-Version" gab "Java HotSpot (TM) 64-Bit-Server-VM (Build 23.1-b03, gemischter Modus)" zurück, aber ich hatte den Win32-Dienst installiert ...

Es stellt sich heraus, dass der Win32-Wrapper auf einem 64-Bit-Computer eine andere Java-Version verwendet ...

Mein Fix bestand also darin, die 32-Bit-Version des Wrappers zu deinstallieren und die 64-Bit-Version zu installieren. Abneigung gegen meine Maschine; Nur Gewohnheit, denke ich ... Aber zum Glück habe ich das Problem irgendwann gelöst ...

James Joyce
quelle
1
Dieses Problem kann auftreten, wenn sowohl die 32- als auch die 64-Bit-Version von Java installiert sind und ein automatisches (oder in meinem Fall erzwungenes Unternehmens-) Update nur 1 davon aktualisiert. Das Deinstallieren aller Java-Instanzen und das erneute Installieren von 32- und 64-Bit wird behoben.
DannyMeister
0

Für mein Win7

Paradox war java.exe und javaw.exe im System32-Ordner. Beim Öffnen dieses Ordners konnte ich sie nicht sehen, aber über die Suche im Startmenü erhalte ich Links zu diesen Dateien und habe sie entfernt. Next Searsh gab mir Links zu Dateien von JAVA_HOME

Magie )

Ihar Yudziankou
quelle
-1

Wechseln Sie in das richtige Verzeichnis, java.exedh wechseln Sie zur erforderlichen JDK-Versionjava.exe

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

Führen Sie das java.exeaus diesem Verzeichnis aus, es hat Vorrang vor den Einstellungen für Registrierung und $ PATH.

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

Ich habe dieses Problem durch Deinstallation von Java 1.8 gelöst

Iman Marashi
quelle
-3

Das Glas wurde so zusammengestellt, dass es den 1.6 Anforderungen entspricht. Deshalb erhalten Sie diesen Fehler. Zwei Vorsätze:
1) Verwenden Sie Java 1.6

ODER

2) Kompilieren Sie das Glas neu, damit es Ihrer Umgebung entspricht 1.7

Woot4Moo
quelle
Ich habe eigentlich beides gemacht, aber lass mich ein bisschen zurück. Die JAR wird tatsächlich über eine C # -GUI ausgeführt. Die JAR selbst wird über die Befehlszeile ausgeführt, jedoch nicht über die GUI. Ich denke, es könnte möglicherweise eine andere JAR innerhalb der JAR sein, die ich ausführe (in Bezug auf das Ausführen der GUI). Könnte dies dann der Fall sein? Dass eine verschachtelte JAR-Datei auf 1.6 kompiliert wurde?
Bryan A
Das klingt unplausibel. Java-Versionen sind abwärtskompatibel. Code, der für / unter JDK 6 kompiliert wurde, funktioniert unter Java 7 ohne Neukompilierung oder Änderungen.
Jesper
@Jesper Ich kann dies mit einem ähnlichen Problem verwechseln, das ich in Eclipse oft sehe.
Woot4Moo
1
@Jesper deshalb macht das alles für mich keinen Sinn. Alles, was ich finde, bezieht sich auf eine neue Version einer JAR, die auf einem alten Java wie 1.6 mit einer 1.5 JRE ausgeführt wird. Aber dieses Problem scheint rückwärts zu sein.
Bryan A
-3

Entfernen Sie mit regedit die Einträge, die Java 7 entsprechen. Es wird funktionieren.

Olive
quelle