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):

  1. Зайдите в меню "Пуск" и введите regedit в поле поиска.
  2. Перейдите к пути HKEY_LOCAL_MACHINE\Software\JavaSoft (в Windows 10 теперь есть это: HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft)
  3. Щелкните правой кнопкой мыши папку JavaSoft и выберите NewKey
  4. Назовите новые ключевые 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. Принятое решение также исправило это.