J'ai essayé d'ouvrir Groovy Shell (groovysh
) sous Windows 8 et j'ai obtenu le résultat suivant:
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 l’impression du message ci-dessus, le shell a démarré comme prévu.
Dennis répond est correct. 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 ceci: HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
-> Key
Prefs
et tout devrait fonctionner.Vous pouvez également enregistrer et exécuter un fichier *.reg
avec le contenu suivant:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
J'ai pu résoudre le problème en créant manuellement la clé de registre suivante:
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
C'est en fait un bug du JDK. Il a été signalé à plusieurs reprises au fil des ans, mais seulement dans 8139507 a-t-il finalement été pris au sérieux par Oracle.
Le problème se trouvait dans le code source du JDK pour WindowsPreferences.Java
. Dans cette classe, les deux nœuds userRoot
et systemRoot
ont été déclarés statiques comme dans:
/**
* User root node.
*/
static final Preferences userRoot =
new WindowsPreferences(USER_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);
/**
* System root node.
*/
static final Preferences systemRoot =
new WindowsPreferences(SYSTEM_ROOT_NATIVE_HANDLE, WINDOWS_ROOT_PATH);
Cela signifie que la première fois que la classe est référencée , les deux variables statiques sont lancées et, par là, la clé de registre pour HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= arborescence système ) sera créé s'il n'existe pas déjà.
Ainsi, même si l'utilisateur prenait toutes les précautions dans son propre code et ne touchait jamais ou ne référençait pas l'arborescence système, la JVM tenterait toujours d'instancier systemRoot
, provoquant ainsi l'avertissement. C'est un bogue subtil intéressant.
Un correctif a été validé pour la source JDK en juin 2016 et fait partie de Java9. Il y a aussi un backport pour Java8 qui est dans u202.
Ce que vous voyez est en réalité un avertissement de l'enregistreur interne du JDK. Ce n'est pas une exception. Je pense que l’avertissement peut être ignoré sans risque… sauf si le code de l’utilisateur demande les préférences système, mais c’est très rarement le cas.
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 de JRE créait la clé de registre HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
et masquait effectivement le bogue. D'autre part, vous n'avez jamais vraiment eu à exécuter un programme d'installation afin de disposer d'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 format .tar.gz
depuis de nombreuses années.
Si quelqu'un tente de résoudre ce problème sur une version 64 bits de Windows, vous devrez peut-être créer la clé suivante:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
Le problème est que cette simple console ne peut pas éditer le registre. Pas besoin de modifier le registre à la main, il suffit de lancer la groovysh
une fois avec des privilèges administratifs. Tous les lancements suivants fonctionnent sans erreur.
Avait un problème similaire lors du démarrage de Apache jmeter sur Windows 8 64 bits:
[]Apache-jmeter-2.13\bin>jmeter
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.
Solution Dennis Traub utilisée avec succès, avec explications Mkorsch. Ou vous pouvez créer un fichier avec l'extension "reg" et y écrire ce qui suit:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]
... puis l'exécuter.
Je recevais le message suivant:
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002
et il était parti après la création de l'une de ces clés de registre, la mienne est en 64 bits, alors j'ai seulement essayé.
32 bit Windows
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
64 bit Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
Cela m'est arrivé.
Apparemment, c'est parce que Java n'a pas l'autorisation de créer des clés de registre.
Vous recevez le même avertissement lorsque vous effectuez un projet de compilation GWT dans Eclipse. La solution acceptée a également résolu le problème.