web-dev-qa-db-fra.com

Avertissement Groovy Shell "Impossible d'ouvrir / créer le nœud racine prefs ..."

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.

183
Dennis Traub

Dennis répond est correct. Cependant, je voudrais expliquer la solution de manière un peu plus détaillée (pour l'utilisateur Windows):

  1. Allez dans votre menu Démarrer et tapez regedit dans le champ de recherche.
  2. Accédez au chemin HKEY_LOCAL_MACHINE\Software\JavaSoft (Windows 10 semble avoir maintenant ceci: HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft)
  3. Faites un clic droit sur le dossier JavaSoft et cliquez sur New -> Key
  4. Nommez la nouvelle clé 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]
321
MKorsch

J'ai pu résoudre le problème en créant manuellement la clé de registre suivante:

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
71
Dennis Traub

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.

Informations sur le 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 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.

42
peterh

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
30
walkern

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.

7
Darksnake

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.

2
razvanone

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
1
Sohail Ahmed

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

1
Wassa

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.

0
Craigo