Groovy Предупреждение о оболочке "Не удалось открыть/создать root prefs node..."
Я попытался открыть оболочку Groovy (groovysh
) в Windows 8 и получил следующий вывод:
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.
После печати вышеуказанного сообщения оболочка запускается, как ожидалось.
Ответы
Ответ 1
Денис ответ правильный. Однако я хотел бы объяснить решение более подробно (для пользователей Windows):
- Зайдите в меню "Пуск" и введите
regedit
в поле поиска. - Перейдите к пути
HKEY_LOCAL_MACHINE\Software\JavaSoft
(в Windows 10 теперь есть это: HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
) - Щелкните правой кнопкой мыши папку JavaSoft и выберите
New
→ Key
- Назовите новые ключевые
Prefs
и все должно работать.
Либо сохраните и выполните файл *.reg
со следующим содержимым:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
Ответ 2
Мне удалось решить проблему, вручную создав следующий раздел реестра:
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
Ответ 3
На самом деле это ошибка JDK. За несколько лет об этом сообщалось несколько раз, но только в 8139507 годах Oracle наконец восприняла его всерьез.
Проблема была в исходном коде JDK для WindowsPreferences.java
. В этом классе оба узла userRoot
и systemRoot
были объявлены статическими, как в:
/**
* 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);
Это означает, что при первом обращении к классу будут инициированы обе статические переменные, и этим будет HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
ключ реестра для HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= системное дерево), если он еще не существует.
Таким образом, даже если пользователь принял все меры предосторожности в своем собственном коде и никогда не касался и не ссылался на дерево систем, JVM все равно будет пытаться создать экземпляр systemRoot
, вызывая предупреждение. Это интересная тонкая ошибка.
В июне 2016 года исправлено исправление источника JDK, и оно является частью Java9 и более поздних версий. Там также портировать для Java8, который находится в U202.
То, что вы видите, на самом деле является предупреждением от внутреннего регистратора JDK. Это не исключение. Я считаю, что предупреждение можно безопасно игнорировать.... если пользовательский код действительно не требует системных настроек, но это очень редко имеет место.
Информация о бонусе
Ошибка не проявлялась в версиях до Java 1.7.21, потому что до этого установщик JRE создавал для вас ключ реестра HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
, и это эффективно скрывало ошибку. С другой стороны, вам никогда не требовалось запускать установщик, чтобы иметь JRE на вашем компьютере, или, по крайней мере, это не было целью Sun/Oracle. Как вам известно, Oracle много лет распространяет JRE для Windows в формате .tar.gz
.
Ответ 4
Если кто-то пытается решить эту проблему в 64-разрядной версии Windows, возможно, вам потребуется создать следующий ключ:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
Ответ 5
Проблема в том, что простая консоль не может редактировать реестр. Не нужно редактировать реестр вручную, просто запустите groovysh
один раз с административными привилегиями. Все последующие запуски работают без ошибок.
Ответ 6
Имела аналогичную проблему при запуске apache jmeter в Windows 8 64 бит:
[]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.
Успешно использовалось решение Dennis Traub с объяснениями Mkorsch. Или вы можете создать файл с расширением "reg" и записать в него следующее:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]
... затем выполните его.
Ответ 7
Я получил следующее сообщение:
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002
и он исчез после создания одного из этих разделов реестра, у меня 64 бит, поэтому я попробовал только это.
32 bit Windows
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
64 bit Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
Ответ 8
Это случилось со мной.
По-видимому, это связано с тем, что у Java нет разрешения на создание разделов реестра.
Смотрите: Java: java.util.Preferences Failed
Ответ 9
Получено то же предупреждение при выполнении проекта компиляции GWT в Eclipse. Принятое решение также исправило это.