Ich habe versucht, die Groovy Shell ( groovysh
) unter Windows 8 zu öffnen und habe die folgende Ausgabe erhalten:
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.
Nach dem Drucken der obigen Nachricht wurde die Shell wie erwartet gestartet.
windows
groovy
groovyshell
Dennis Traub
quelle
quelle
Antworten:
Dennis Antwort ist richtig. Ich möchte die Lösung jedoch etwas ausführlicher erläutern (für Windows-Benutzer):
regedit
in das Suchfeld ein.HKEY_LOCAL_MACHINE\Software\JavaSoft
(Windows 10 scheint nun diese hier haben:HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
->Key
Prefs
und alles sollte funktionieren.Alternativ können Sie eine
*.reg
Datei mit folgendem Inhalt speichern und ausführen :quelle
HKEY_LOCAL_MACHINE\Software\JavaSoft
Ich konnte das Problem beheben, indem ich den folgenden Registrierungsschlüssel manuell erstellte:
quelle
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 KnotenuserRoot
undsystemRoot
wie folgt als statisch deklariert: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.quelle
Wenn jemand versucht, dies unter einer 64-Bit-Version von Windows zu lösen, müssen Sie möglicherweise den folgenden Schlüssel erstellen:
quelle
Das Problem ist, dass die einfache Konsole die Registrierung nicht bearbeiten kann. Sie müssen die Registrierung nicht manuell bearbeiten, sondern müssen sie nur
groovysh
einmal mit Administratorrechten starten . Alle nachfolgenden Starts funktionieren fehlerfrei.quelle
Hatte ein ähnliches Problem beim Starten von Apache Jmeter unter Windows 8 64 Bit:
Erfolgreich eingesetzte Dennis Traub-Lösung mit Mkorsch-Erklärungen. Oder Sie erstellen eine Datei mit der Erweiterung "reg" und schreiben Folgendes ein:
... dann ausführen.
quelle
Ich habe die folgende Nachricht erhalten:
und es war weg, nachdem ich einen dieser Registrierungsschlüssel erstellt hatte, meiner ist 64 Bit, also habe ich nur das versucht.
quelle
Das ist mir passiert.
Anscheinend liegt es daran, dass Java keine Berechtigung zum Erstellen von Registrierungsschlüsseln hat.
Siehe: Java: java.util.Preferences schlägt fehl
quelle
runas
Sie diese Option , um Ihre Anwendung als lokaler Administrator auszuführen, und der Registrierungsschlüssel wird unter HKLM erstellt. Was Java nicht hat, ist ein Mechanismus, um nach erhöhten Berechtigungen zu fragen (dh im Idealfall hätte es die Windows-Benutzerkontensteuerung aufgerufen, anstatt zu scheitern - es ist fraglich, ob dies eine allgemein gute Idee ist).Das Problem ist in der Tat der fehlende Registerschlüssel. Es kann manuell erstellt werden
ODER
Es kann automatisch erstellt werden, indem das Programm einmal als Administrator ausgeführt wird. Dadurch erhält das Programm die erforderlichen Berechtigungen, und wenn es wie gewohnt ausgeführt wird, funktioniert es weiterhin ordnungsgemäß.
quelle