J'ai essayé d'ouvrir Groovy Shell ( groovysh
) sur Windows 8 et j'ai obtenu la sortie suivante:
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.
Après avoir imprimé le message ci-dessus, le shell a démarré comme prévu.
windows
groovy
groovyshell
Dennis Traub
la source
la source
Réponses:
La réponse de Dennis est correcte. Cependant, je voudrais expliquer la solution de manière un peu plus détaillée (pour l'utilisateur Windows):
regedit
dans le champ de recherche.HKEY_LOCAL_MACHINE\Software\JavaSoft
(Windows 10 semble avoir maintenant ce ici:HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
->Key
Prefs
et tout devrait fonctionner.Vous pouvez également enregistrer et exécuter un
*.reg
fichier avec le contenu suivant:la source
HKEY_LOCAL_MACHINE\Software\JavaSoft
J'ai pu résoudre le problème en créant manuellement la clé de registre suivante:
la source
Il s'agit en fait d'un bogue JDK. Il a été rapporté à plusieurs reprises au fil des ans, mais ce n'est qu'en 8139507 qu'il a finalement été pris au sérieux par Oracle.
Le problème était dans le code source JDK pour
WindowsPreferences.java
. Dans cette classe, les deux nœudsuserRoot
etsystemRoot
ont été déclarés statiques comme dans:Cela signifie que la première fois que la classe est référencée, les deux variables statiques seront lancées et que la clé de registre pour
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= arborescence système) sera tentée d'être créée si elle n'existe pas déjà.Ainsi, même si l'utilisateur a pris toutes les précautions dans son propre code et n'a jamais touché ou référencé l'arborescence du système, alors la JVM essaierait encore de s'instancier
systemRoot
, provoquant ainsi l'avertissement. C'est un bug subtil intéressant.Il y a un correctif appliqué à la source JDK en juin 2016 et il fait partie de Java9 et des versions ultérieures. Il existe également un backport pour Java8 qui se trouve dans u202.
Ce que vous voyez est vraiment un avertissement de l'enregistreur interne du JDK. Ce n'est pas une exception. Je crois que l'avertissement peut être ignoré en toute sécurité ... à moins que le code utilisateur ne veuille effectivement les préférences du système, mais c'est très rarement le cas.
Info bonus
Le bogue ne s'est pas révélé dans les versions antérieures à Java 1.7.21, car jusque-là, le programme d'installation JRE créait la clé de registre
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
pour vous, ce qui masquerait efficacement le bogue. D'un autre côté, vous n'avez jamais vraiment été obligé d'exécuter un programme d'installation pour avoir un JRE sur votre machine, ou du moins cela n'a pas été l'intention de Sun / Oracle. Comme vous le savez peut-être, Oracle distribue le JRE pour Windows au.tar.gz
format depuis de nombreuses années.la source
Si quelqu'un essaie de résoudre ce problème sur une version 64 bits de Windows, vous devrez peut-être créer la clé suivante:
la source
Le problème est qu'une simple console ne peut pas modifier le registre. Pas besoin de modifier le registre à la main, il suffit de lancer
groovysh
une fois avec les privilèges administratifs. Tous les lancements ultérieurs fonctionnent sans erreur.la source
A eu un problème similaire lors du démarrage d'Apache jmeter sur Windows 8 64 bits:
Solution Dennis Traub utilisée avec succès, avec les explications de Mkorsch. Ou vous pouvez créer un fichier avec l'extension "reg" et y écrire ce qui suit:
... puis exécutez-le.
la source
Je recevais le message suivant:
et il était parti après avoir créé l'une de ces clés de registre, la mienne est 64 bits, donc j'ai essayé seulement cela.
la source
Cela m'est arrivé.
Apparemment, c'est parce que Java n'a pas l'autorisation de créer des clés de registre.
Voir: Java: java.util.Preferences Failing
la source
runas
pour exécuter votre application en tant qu'utilisateur administrateur local et il créera avec plaisir la clé de registre sous HKLM. Ce que Java n'a pas, c'est un mécanisme pour demander des autorisations élevées (c'est-à-dire que, idéalement, il aurait appelé l'UAC Windows au lieu d'échouer - il est douteux que ce soit une bonne idée universellement).Le problème est en effet la clé de registre qui manque. Il peut être créé manuellement
OU
il peut être créé automatiquement en exécutant le programme en tant qu'administrateur une fois. Cela donnera au programme les autorisations requises, et quand il sera exécuté normalement, il fonctionnera toujours correctement.
la source