Dies ist eigentlich ein JDK-Fehler. Es wurde im Laufe der Jahre mehrmals berichtet, aber erst 8139507 wurde es von Oracle endgültig ernst genommen.
Das Problem lag im JDK-Quellcode für WindowsPreferences.java
. In dieser Klasse wurden beide Knoten userRoot
und systemRoot
wie folgt als statisch deklariert:
/**
* 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);
Dies bedeutet, dass beim ersten Referenzieren der Klasse beide statischen Variablen initiiert werden und auf diese HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
Weise versucht wird, den Registrierungsschlüssel für (= Systembaum) zu erstellen, falls dieser noch nicht vorhanden ist.
Selbst wenn der Benutzer alle Vorsichtsmaßnahmen in seinem eigenen Code getroffen und den Systembaum nie berührt oder referenziert hätte, würde die JVM tatsächlich versuchen, zu instanziieren systemRoot
, wodurch die Warnung ausgelöst wird. Es ist ein interessanter subtiler Fehler.
Im Juni 2016 wurde ein Fix für die JDK-Quelle festgelegt, der Teil von Java9 ist. Es gibt auch einen Backport für Java8 in u202.
Was Sie sehen, ist wirklich eine Warnung vom internen Logger des JDK. Es ist keine Ausnahme. Ich glaube, dass die Warnung sicher ignoriert werden kann ... es sei denn, der Benutzercode möchte tatsächlich die Systemeinstellungen, aber das ist sehr selten der Fall.
Bonusinfo
Der Fehler trat in Versionen vor Java 1.7.21 nicht auf, da das JRE-Installationsprogramm bis dahin einen Registrierungsschlüssel HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
für Sie erstellt und den Fehler dadurch effektiv ausgeblendet hat . Andererseits mussten Sie nie wirklich ein Installationsprogramm ausführen, um eine JRE auf Ihrem Computer zu haben, oder zumindest war dies nicht die Absicht von Sun / Oracle. Wie Sie vielleicht wissen, vertreibt Oracle die JRE für Windows .tar.gz
seit vielen Jahren im Format.