La clave de registro '…' tiene el valor '1.7', pero se requiere '1.6'. Java 1.7 está instalado y el registro lo está apuntando

95

Recientemente, mi equipo de desarrollo se vio obligado a pasar a un entorno de desarrollo remoto donde no tenemos acceso completo a los servidores. Antes del cambio, teníamos un JAR que funcionaba bien en Java 1.7 x64 junto con JRE 7. Cuando nos mudamos al nuevo servidor, nuestro JAR se estaba ejecutando correctamente, pero luego uno de los administradores del servidor "actualizó" nuestro Java a uno más antiguo. versión y desinstalamos el que estábamos usando. No me preguntes por qué, no lo sé. Reinstalé Java 1.7 y desinstalé 1.6 junto con los JRE.

El siguiente problema ocurre en tiempo de ejecución, no hay errores de compilación:

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.

Ejecuté el mismo JAR en mi computadora portátil sin problemas. Tanto el servidor como mi computadora portátil tienen JDK 1.7 y JRE 7 en las respectivas variables% HOME% y PATH del sistema. Incluso reinstalé JRE 6 y lo coloqué más tarde en las variables PATH del entorno del sistema con el mismo resultado.

También cambié el registro de nuevo para mirar 1.6 y resulta en lo siguiente, que busqué y parece ser por tener varios Javas instalados (lo que lleva de nuevo a mi problema original):

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

Agradecería cualquier información que tengan, ya que he estado mirando varios foros, pero nada parece tener exactamente mi problema. Además, esto también ha sucedido en otro servidor que estamos usando. ¡Gracias!

Actualización: No hubo suerte al volver a compilar el JAR a 1.6 o 1.7 y hacer coincidir el JDK. Además, ¿por qué en el mundo una versión más nueva de Java rompería una versión compilada anterior?

Bryan A
fuente

Respuestas:

159

Esto sucede cuando de alguna manera confundes Java. Está intentando ejecutar una máquina virtual java 6 donde encontró un JRE 7. Puede mostrar este problema incluso si escribe en la línea de comandos solo javao java -versionen un entorno mal configurado. El JAR no es el problema, excepto en el caso muy poco probable en el que el código del JAR lo busque en el Registro de Windows (que probablemente no sea su caso).

En mi caso, tenía el java.exe, javaw.exey javaws.exede Java 6 en la Windows/System32carpeta (no sé cómo llegó a estar allí). El resto del JDK y JRE se encuentran en el PATH interior C:\Java\jdk_1.7.0\bin. ¡Ups!

Victor Stafusa
fuente
62
Enfrenté el mismo problema pero con Java 8 después de desinstalarlo. Se solucionó el problema al eliminar java.exe, javaw.exe y javaws.exe presentes en Windows / System32. Realmente extraño porque ni siquiera yo sé cómo llegó allí.
C Deepak
2
Gracias por avisar, ayuda. JDK 1.7 vs JDK 1.8 en mi caso.
2014
7
¡Para personas x86! Originalmente instalé el 1.8 jre hace un par de meses y quería 1.8 sdk. java.exe, javaw.exey javaws.exese almacena bajo Windows/SysWOW64. También por alguna razón cuando he instalado el SDK 1.8 instalado java.exe, javaw.exey javaws.exebajo C:/ProgramData/Oracle/Java/javapath. No sé por qué, pero los eliminé también y java -versionaún funcionan.
Luminoso
1
System32 fue la clave para mí. Me aseguré de que javapath tenga la versión correcta y que mis variables de entorno estén configuradas correctamente ... nada funcionó hasta que arreglé ese trato de System32. Todo tiene que estar en la misma página.
BK
2
la eliminación de java.exe, javaw.exe y javaws.exe presentes en indows / System32 soluciona el problema por mí. Gracias @C Deepak
Tahir Jilani
59

Acabo de tener un error similar al instalar java 8 (jdk & jre) en un sistema que ya ejecutaba Java 7.

Error: clave de registro 'Software \ JavaSoft \ Java Runtime

El entorno '\ CurrentVersion' tiene el valor '1.8', pero se requiere '1.7'.

Error: no se pudo encontrar java.dll Error: no se pudo encontrar Java SE Runtime Environment.

Mi entorno se configuró correctamente (Path & java_home correctamente definidos), pero el problema surge de la forma en que funcionaban los instaladores de Java anteriores a 8, que es que solían copiar los tres ejecutables (java.exe, javaw.exe y javaws.exe ) al directorio del sistema de Windows. Estos permanecen a menos que se sobrescriban con una nueva instalación anterior a 8.

Sin embargo, el instalador de Java 8 crea enlaces simbólicos en un nuevo directorio, C: \ ProgramData \ Oracle \ Java \ javapath, que apunta a la ubicación real de JRE 8.

Esto significa que en realidad ejecutará los antiguos 7 ex pero usará los nuevos 8 DLL.

Entonces, la solución es simplemente eliminar los 3 exes de Java, como arriba, del directorio del sistema de Windows.

Si está ejecutando Java de 32 bits en un Windows de 64 bits, los exes estarían en Windows \ SysWOW64, de lo contrario en Windows \ System32.

Jool
fuente
Esta es una solución que funciona, enfrenté el mismo problema y esto lo resolvió.
Sagar D
Esta es una solución mucho mejor ... al menos para mí. Gracias.
cbmeeks
28

Eliminé archivos java en windows / system32 y también eliminé c: \ ProgramData \ Oracle \ Java \ javapath de la variable PATH, porque había 3 enlaces simbólicos a archivos java 1.8.

Tenía JDK 1.7 en la variable% JAVA_HOME% y java1.7 / bin en la RUTA.

PS1: Mi problema estaba entre Java 1.7 y Java 1.8.

PS2: No puedo agregar esto como un comentario a la respuesta de Victor porque no tengo suficientes puntos.

José Ignacio Centeno
fuente
3
Problema: Me enfrenté a un problema de 1.7 y 1.8 al intentar usar sencha cmd. Solución: agregué la ruta jdk1.7 / bin en la variable de entorno% PATH% y eliminé los archivos java (java.exe, javaw.exe, javaws.exe) del directorio c: / windows / system32. El problema se resolvió :)
saurabh
3
todo el maldito problema eran los archivos X: \ Windows \ SysWOW64 y X: \ Windows \ System32 java * .exe .. una vez eliminados, todo volvió a funcionar ..
Thiagoh
17

En el menú INICIO, escriba "regedit" para abrir el editor del Registro.

Vaya a "HKEY_LOCAL_MACHINE" en el menú de árbol / explorador de registro del lado izquierdo

Haga clic en "SOFTWARE" dentro de los registros "HKEY_LOCAL_MACHINE"

Haga clic en "JavaSoft" dentro de los registros de "SOFTWARE"

Haga clic en "Java Runtime Environment" dentro de la lista de registros "JavaSoft". Aquí puede ver las diferentes versiones de Java instalado.

Haga clic en "Java Runtime Environment" - En el lado derecho obtendrá 4-5 filas. Seleccione "CurrentVersion" y haga clic con el botón derecho (seleccione la opción de modificación) Cambiar la versión a "1.7"

Ahora la magia se ha completado

satender
fuente
4

No sé si alguien todavía está siguiendo este hilo, pero recientemente tuve este problema cuando intenté iniciar ActiveMQ 5.10 como un servicio de Windows.

No tenía una ruta JAVA_HOME establecida. Tenía Java 6 y Java 7 instalados, pero la versión predeterminada era v7. (es decir, si abrí una ventana de comandos y escribí "java -version").

Aquí es donde estaba la pista: "java -version" devolvió "Java HotSpot (TM) 64-Bit Server VM (compilación 23.1-b03, modo mixto)" pero me habían instalado el servicio Win32 ...

Resulta que si usa el contenedor de Win32 en una máquina de 64 bits, de alguna manera decide usar una versión diferente de Java ...

Entonces, mi solución fue desinstalar la versión de 32 bits del contenedor e instalar la versión de 64 bits. aversión en mi máquina; solo un hábito, supongo ... Pero afortunadamente resolví el problema eventualmente ...

James Joyce
fuente
1
Puede encontrar este problema si tiene instaladas las versiones de 32 y 64 bits de Java y una actualización automática (o en mi caso corporativa forzada) solo actualiza 1 de ellas. Se resolverá la desinstalación de todas las instancias de Java y la reinstalación de 32 y 64 bits.
DannyMeister
0

Para mi Win7

Paradox estaba en ser java.exe y javaw.exe en la carpeta System32. Al abrir esa carpeta no pude verlos, pero al usar la búsqueda en el menú Inicio, obtengo enlaces a esos archivos, los eliminé. Siguiente searsh me dio enlaces a archivos de JAVA_HOME

magia )

Ihar Yudziankou
fuente
-1

Cambie al directorio con la correcta, java.exees decir, vaya a la versión de JDK requeridajava.exe

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

Ejecute java.exedesde este directorio, tiene prioridad sobre el registro y la configuración de $ PATH.

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

Resolví este problema desinstalando Java 1.8

Iman Marashi
fuente
-3

El tarro se compiló para ser 1.6 compatible. Por eso aparece este error. Dos resoluciones:
1) Utilice Java 1.6

O

2) Vuelva a compilar el frasco para que sea compatible con su entorno 1.7

Woot4Moo
fuente
De hecho, he hecho ambas cosas, pero déjame retroceder un poco. El JAR en realidad se ejecuta a través de una GUI de C #. El propio JAR se ejecuta a través de la línea de comandos, pero no a través de la GUI. Estoy pensando que posiblemente podría ser otro JAR dentro del JAR que estoy ejecutando (relacionado con la ejecución de la GUI). ¿Podría ser este entonces el caso? ¿Que un archivo JAR anidado se compiló en 1.6?
Bryan A
Esto suena inverosímil. Las versiones de Java son compatibles con versiones anteriores; El código compilado para / en JDK 6 funcionará en Java 7 sin recompilación ni modificaciones.
Jesper
@Jesper, puedo estar confundiendo esto con un problema similar que veo en Eclipse a menudo.
Woot4Moo
1
@Jesper, por eso todo esto no tiene sentido para mí. Todo lo que encuentro está relacionado con una nueva versión de un JAR que se ejecuta en un Java antiguo como 1.6 con un JRE 1.5. Pero este problema parece al revés.
Bryan A
-3

Usando regedit, elimine las entradas correspondientes a java 7. Funcionará.

Aceituna
fuente