Intenté abrir Groovy Shell ( groovysh
) en Windows 8 y obtuve el siguiente resultado:
java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs
at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
Después de imprimir el mensaje anterior, el shell comenzó como se esperaba.
windows
groovy
groovyshell
Dennis Traub
fuente
fuente
Respuestas:
La respuesta de Dennis es correcta. Sin embargo, me gustaría explicar la solución de una manera un poco más detallada (para usuarios de Windows):
regedit
en el campo de búsqueda.HKEY_LOCAL_MACHINE\Software\JavaSoft
(Windows 10 ahora parece tener esto aquíHKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
->Key
Prefs
y todo debería funcionar.Alternativamente, guarde y ejecute un
*.reg
archivo con el siguiente contenido:fuente
HKEY_LOCAL_MACHINE\Software\JavaSoft
Pude resolver el problema creando manualmente la siguiente clave de registro:
fuente
Esto es en realidad un error JDK. Se ha informado varias veces a lo largo de los años, pero solo en 8139507 Oracle finalmente lo tomó en serio.
El problema estaba en el código fuente JDK para
WindowsPreferences.java
. En esta clase, ambos nodosuserRoot
ysystemRoot
se declararon estáticos como en:Esto significa que la primera vez que se haga referencia a la clase , se iniciarán ambas variables estáticas y, de este modo
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
, se intentará crear la clave de registro para (= árbol del sistema) si aún no existe.Entonces, incluso si el usuario tomara todas las precauciones en su propio código y nunca tocara o hiciera referencia al árbol del sistema, entonces la JVM aún trataría de crear una instancia
systemRoot
, causando la advertencia. Es un error sutil interesante.Hay una solución comprometida con la fuente JDK en junio de 2016 y es parte de Java9 en adelante. También hay un backport para Java8 que está en u202.
Lo que ves es realmente una advertencia del registrador interno del JDK. No es una excepción. Creo que la advertencia se puede ignorar de forma segura ... a menos que el código de usuario realmente quiera las preferencias del sistema, pero eso es muy raro.
Información adicional
El error no se reveló en versiones anteriores a Java 1.7.21, porque hasta entonces el instalador de JRE crearía una clave de registro
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
para usted y esto efectivamente ocultaría el error. Por otro lado, nunca se te ha requerido ejecutar un instalador para tener un JRE en tu máquina, o al menos esta no ha sido la intención de Sun / Oracle. Como sabrán, Oracle ha estado distribuyendo el JRE para Windows en.tar.gz
formato durante muchos años.fuente
Si alguien está tratando de resolver esto en una versión de Windows de 64 bits, es posible que deba crear la siguiente clave:
fuente
El problema es que la consola simple no puede editar el registro. No es necesario editar el registro a mano, solo inicie el
groovysh
archivo una vez con privilegios administrativos. Todos los lanzamientos posteriores funcionan sin error.fuente
Tuve un problema similar al iniciar apache jmeter en Windows 8 64 bit:
Utilizó con éxito la solución Dennis Traub, con explicaciones de Mkorsch. O puede crear un archivo con la extensión "reg" y escribir en él lo siguiente:
... luego ejecútalo.
fuente
Recibía el siguiente mensaje:
y desapareció después de crear una de estas claves de registro, la mía es de 64 bits, así que probé solo eso.
fuente
Esto me paso a mi.
Aparentemente es porque Java no tiene permiso para crear claves de registro.
Consulte: Java: java.util.Preferences Failing
fuente
runas
para ejecutar su aplicación como usuario administrador local y felizmente creará la clave de registro bajo HKLM. Lo que Java no tiene es un mecanismo para pedir permisos elevados (es decir, idealmente habría invocado Windows UAC en lugar de fallar; es cuestionable si esa es una idea universalmente buena).El problema es de hecho la clave de registro que falta. Se puede crear manualmente
O
se puede crear de forma automática ejecutando el programa como administrador una vez. Eso le dará al programa los permisos requeridos, y cuando se ejecute normalmente, seguirá funcionando correctamente.
fuente