Il s'agit en fait d'un bug du JDK. Il a été signalé à plusieurs reprises au cours des années, mais uniquement dans le cadre de 8139507 a 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
y 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 Les variables statiques seraient lancées et, de ce fait, la clé de registre pour les variables statiques serait créée. HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= arbre système) sera tenté d'être créé s'il 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'arbre système, la JVM essaiera toujours d'instancier systemRoot
ce qui a provoqué l'avertissement. Il s'agit d'un bug subtil et intéressant.
Un correctif a été intégré aux sources du JDK en juin 2016 et fait partie intégrante de Java9. Il y a aussi un backport pour Java8 qui est en u202.
Ce que vous voyez est en fait un avertissement du logger interne du JDK. Il ne s'agit pas d'une exception. Je pense que l'avertissement peut être ignoré sans risque .... à moins que le code utilisateur ne veuille effectivement les préférences du système, mais c'est très rarement le cas.
Infos bonus
Le bogue ne s'est pas révélé dans les versions antérieures à Java 1.7.21, car jusqu'à cette date, le programme d'installation du JRE créait une clé de Registre HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
pour vous et cela cacherait efficacement le bug. D'autre part, il n'a jamais été nécessaire d'exécuter un programme d'installation pour avoir un JRE sur votre machine, ou du moins ce n'était pas l'intention de Sun/Oracle. Comme vous le savez peut-être, Oracle a distribué le JRE pour Windows en .tar.gz
depuis de nombreuses années.
3 votes
Ceci est dû à un bug : bugs.java.com/bugdatabase/view_bug.do?bug_id=6790382
1 votes
Préférences enregistrées dans un fichier en tant que magasin de soutien devrait éviter complètement la question. Il existe des situations où le fait de compter sur les utilisateurs finaux pour changer leur registre abominable n'est pas une solution viable.
2 votes
C'est un bogue Java connu qui existe toujours sur Windows 10 et la mise à jour 112. Il suffit d'exécuter le programme une fois à partir d'une invite élevée et il disparaît.