La chiave di registro "..." ha il valore "1.7", ma è obbligatorio "1.6". Java 1.7 è installato e il registro punta ad esso


95

Il mio team di sviluppo è stato recentemente costretto a un ambiente di sviluppo remoto in cui non abbiamo pieno accesso ai server. Prima del cambiamento avevamo un JAR che funzionava bene su Java 1.7 x64 insieme a JRE 7. Quando siamo passati al nuovo server, il nostro JAR funzionava bene, ma poi uno degli amministratori del server ha "aggiornato" il nostro Java a un vecchio versione e disinstallato quello che stavamo utilizzando. Non chiedermi perché, non lo so. Ho reinstallato Java 1.7 e ho disinstallato 1.6 insieme ai JRE.

Il seguente problema si verifica in fase di esecuzione, non ci sono errori di compilazione:

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.

Ho eseguito lo stesso JAR sul mio laptop senza problemi. Sia il server che il mio laptop hanno JDK 1.7 e JRE 7 nelle rispettive variabili% HOME% e PATH di sistema. Ho persino reinstallato JRE 6 e l'ho inserito successivamente nelle variabili PATH dell'ambiente di sistema con lo stesso risultato.

Ho anche cambiato di nuovo il registro per guardare 1.6 e risulta quanto segue, che ho cercato e sembra essere dovuto all'installazione di più Javas (che riporta al mio problema originale):

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

Apprezzerei qualsiasi intuizione che avete tutti poiché ho esaminato vari forum ma niente sembra avere esattamente il mio problema. Inoltre, questo è accaduto anche su un altro server che stiamo utilizzando. Grazie!

Aggiornamento: nessuna fortuna con la ricompilazione del JAR a 1.6 o 1.7 e la corrispondenza del JDK. Inoltre, perché nel mondo una versione più recente di Java dovrebbe rompere una versione compilata più vecchia?

Risposte:


159

Questo accade quando in qualche modo hai confuso java stesso. Stai tentando di eseguire una VM java 6 in cui ha trovato un JRE 7. Potrebbe mostrare questo problema anche se digiti nella riga di comando solo javao java -versionin un ambiente configurato in modo errato. Il JAR non è il problema, tranne nel caso molto improbabile in cui il codice in JAR sta cercando nel registro di Windows per quello (che probabilmente non è il tuo caso).

Nel mio caso, avevo il java.exe, javaw.exee javaws.exeda Java 6 nella Windows/System32cartella (non so come sia potuto essere lì). Il resto di JDK e JRE è stato trovato nel PATH all'interno C:\Java\jdk_1.7.0\bin. Ops!


62
Ha affrontato lo stesso problema ma con Java 8 dopo la disinstallazione stessa. Risolto il problema eliminando java.exe, javaw.exe e javaws.exe presenti in Windows / System32. Davvero strano perché anche io non so come sia arrivato lì.
C Deepak

2
Grazie per l'avviso, aiuta. JDK 1.7 vs JDK 1.8 nel mio caso.
daoway

7
Per x86 People !! Inizialmente ho installato la coppia 1.8 jre mesi fa e volevo 1.8 sdk. java.exe,, javaw.exeed javaws.exeè memorizzato in Windows/SysWOW64. Anche per qualche ragione, quando ho installato il 1.8 SDK installato java.exe, javaw.exee javaws.exesotto C:/ProgramData/Oracle/Java/javapath. Non so perché, ma li ho eliminati anche io e java -versionfunziona ancora.
Luminoso

1
System32 era la chiave per me. Mi sono assicurato che javapath avesse la versione giusta e le mie variabili di ambiente fossero impostate correttamente ... niente ha funzionato fino a quando non ho risolto l'affare System32. Deve essere tutto sulla stessa pagina.
BK

2
l'eliminazione di java.exe, javaw.exe e javaws.exe presenti in indows / System32 risolve il problema per me. Grazie @C Deepak
Tahir Jilani

59

Ho appena avuto un errore simile durante l'installazione di java 8 (jdk e jre) su un sistema che esegue già Java 7.

Errore: chiave di registro "Software \ JavaSoft \ Java Runtime

L'ambiente "\ CurrentVersion" ha il valore "1.8", ma è obbligatorio "1.7".

Errore: impossibile trovare java.dll Errore: Impossibile trovare Java SE Runtime Environment.

Il mio ambiente è stato impostato correttamente (percorso e java_home definiti correttamente), ma il problema nasce dal modo in cui funzionavano i programmi di installazione Java pre-8, ovvero che utilizzavano per copiare i tre eseguibili (java.exe, javaw.exe e javaws.exe ) nella directory di sistema di Windows. Questi rimangono a meno che non vengano sovrascritti da una nuova installazione pre-8.

Tuttavia, il programma di installazione di Java 8 crea invece collegamenti simbolici in una nuova directory, C: \ ProgramData \ Oracle \ Java \ javapath, che punta alla posizione effettiva di JRE 8.

Ciò significa che eseguirai effettivamente i vecchi 7 ex ma utilizzerai le nuove 8 DLL.

Quindi, la soluzione è semplicemente eliminare i 3 Java ex, come sopra, dalla directory di sistema di Windows.

Se stai eseguendo Java a 32 bit su Windows a 64 bit, l'ex sarebbe in Windows \ SysWOW64, altrimenti in Windows \ System32.


Questa è una soluzione funzionante, ho affrontato lo stesso problema e questo lo ha risolto.
Sagar D

Questa è una soluzione molto migliore ... almeno per me. Grazie.
cbmeeks

28

Ho cancellato i file java su windows / system32 e ho anche rimosso c: \ ProgramData \ Oracle \ Java \ javapath dalla variabile PATH, perché c'erano 3 collegamenti simbolici ai file java 1.8.

Avevo JDK 1.7 nella variabile% JAVA_HOME% e java1.7 / bin nel PERCORSO.

PS1: il mio problema era tra Java 1.7 e Java 1.8.

PS2: non posso aggiungere questo come commento alla risposta di Victor perché non ho abbastanza punti.


3
Problema: ho riscontrato problemi 1.7 e 1.8 durante il tentativo di utilizzare sencha cmd. Soluzione: ho aggiunto il percorso jdk1.7 / bin nella variabile di ambiente% PATH% e ho rimosso i file java (java.exe, javaw.exe, javaws.exe) dalla directory c: / windows / system32. Il problema è stato risolto :)
saurabh

3
l'intero fottuto problema erano i file X: \ Windows \ SysWOW64 e X: \ Windows \ System32 java * .exe .. una volta rimosso, tutto ha ripreso a funzionare ..
thiagoh

17

Nel menu START digita "regedit" per aprire l'editor del registro

Vai a "HKEY_LOCAL_MACHINE" nel menu di esplorazione / albero del registro a sinistra

Fai clic su "SOFTWARE" nei registri "HKEY_LOCAL_MACHINE"

Fare clic su "JavaSoft" nei registri "SOFTWARE"

Fai clic su "Java Runtime Environment" nell'elenco dei registri "JavaSoft" qui puoi vedere diverse versioni di java installato

Fai clic su "Java Runtime Environment" - Sul lato destro otterrai 4-5 righe. Seleziona "CurrentVersion" e fai clic con il pulsante destro del mouse (seleziona l'opzione di modifica) Cambia la versione in "1.7"

Ora la magia è stata completata


4

Non so se qualcuno stia ancora seguendo questo thread, ma di recente ho riscontrato questo problema quando ho provato ad avviare ActiveMQ 5.10 come servizio Windows.

Non avevo un percorso JAVA_HOME impostato. Avevo Java 6 e Java 7 installati, ma la versione predefinita era v7. (cioè se apro una finestra di comando e digito "java -version").

Qui è dove l'indizio era: "java -version" ha restituito "Java HotSpot (TM) 64-Bit Server VM (build 23.1-b03, modalità mista)" ma avevo installato il servizio Win32 ...

Si scopre che se si utilizza il wrapper Win32 su una macchina a 64 bit, in qualche modo decide di utilizzare una versione diversa di Java ...

Quindi la mia soluzione era disinstallare la versione a 32 bit del wrapper e installare la versione a 64 bit. avversione sulla mia macchina; solo abitudine immagino ... Ma fortunatamente alla fine ho risolto il problema ...


1
È possibile riscontrare questo problema se sono installate entrambe le versioni a 32 e 64 bit di Java e un aggiornamento automatico (o nel mio caso forzato aziendale) ne aggiorna solo 1. La disinstallazione di tutte le istanze di Java e la reinstallazione sia a 32 che a 64 bit verranno risolte.
DannyMeister

0

Per il mio Win7

Paradox consisteva nell'essere java.exe e javaw.exe nella cartella System32. Aprendo quella cartella non riuscivo a vederli ma usando la ricerca nel menu Start ottengo collegamenti a quei file, li rimuovo. Next searsh mi ha fornito i collegamenti ai file da JAVA_HOME

Magia )


-1

Passa alla directory con la corretta, ad java.exeesempio vai alla versione JDK richiestajava.exe

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

Esegui java.exeda questa directory, ha la precedenza sulle impostazioni di registro e $ PATH.

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


-3

Il vaso è stato compilato per essere 1.6 conforme. Ecco perché ricevi questo errore. Due risoluzioni:
1) Usa Java 1.6

O

2) Ricompila il jar per renderlo conforme al tuo ambiente 1.7


In realtà ho fatto entrambe le cose, ma lasciatemi fare un passo indietro. Il JAR viene effettivamente eseguito tramite una GUI C #. Il JAR stesso viene eseguito tramite la riga di comando, ma non tramite la GUI. Penso che potrebbe essere un altro JAR all'interno del JAR che sto eseguendo (relativo all'esecuzione della GUI). Potrebbe essere così? Che un file JAR nidificato è stato compilato a 1.6?
Bryan A

Questo non sembra plausibile. Le versioni Java sono compatibili con le versioni precedenti; il codice compilato per / su JDK 6 funzionerà su Java 7 senza ricompilazione o modifiche.
Jesper

@Jesper potrei confondere questo con un problema simile che vedo spesso in Eclipse.
Woot4Moo

1
@Jesper ecco perché tutto questo non ha senso per me. Tutto quello che trovo è correlato a una nuova versione di un JAR in esecuzione su un vecchio Java come 1.6 con un JRE 1.5. Ma questo problema sembra arretrato.
Bryan A

-3

Utilizzando regedit, rimuovere le voci corrispondenti a java 7. Funzionerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.