Я попытался открыть Groovy Shell ( 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.
После печати вышеприведенного сообщения оболочка запустилась как положено.
windows
groovy
groovyshell
Деннис Трауб
источник
источник
Ответы:
Денис ответ правильный. Однако я хотел бы объяснить решение более подробно (для пользователей Windows):
regedit
в поле поиска.HKEY_LOCAL_MACHINE\Software\JavaSoft
(Windows 10 , кажется, теперь это здесь:HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
->Key
Prefs
и все должно работать.Либо сохраните и выполните
*.reg
файл со следующим содержимым:источник
HKEY_LOCAL_MACHINE\Software\JavaSoft
Мне удалось решить проблему, вручную создав следующий раздел реестра:
источник
Это на самом деле ошибка JDK. Об этом сообщалось несколько раз за эти годы, но только в 8139507 годах он был окончательно воспринят Oracle.
Проблема была в исходном коде JDK для
WindowsPreferences.java
. В этом классе оба узлаuserRoot
иsystemRoot
были объявлены статическими, как в:Это означает, что при первом обращении к классу будут инициированы обе статические переменные, и при этом
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
формате.источник
Если кто-то пытается решить эту проблему в 64-разрядной версии Windows, вам может потребоваться создать следующий ключ:
источник
Проблема в том, что простая консоль не может редактировать реестр. Нет необходимости редактировать реестр вручную, просто запустите
groovysh
один раз с правами администратора. Все последующие запуски работают без ошибок.источник
Была аналогичная проблема при запуске Apache Jmeter на Windows 8 64 бит:
Успешно использовал решение Дениса Трауба с объяснениями Мкорша. Или вы можете создать файл с расширением "reg" и записать в него следующее:
... затем выполните это.
источник
Я получил следующее сообщение:
и он пропал после создания одного из этих ключей реестра, мой 64-битный, поэтому я попробовал только это.
источник
Это случилось со мной.
Очевидно, это потому, что у Java нет разрешения на создание разделов реестра.
См .: Java: java.util.Preferences Failing
источник
runas
для запуска приложения от имени локального администратора, и оно с радостью создаст раздел реестра в HKLM. В Java нет механизма запроса повышенных разрешений (то есть в идеале он должен был бы вызывать Windows UAC вместо сбоя - сомнительно, является ли это универсально хорошей идеей).Проблема действительно в том, что отсутствует ключ реестра. Может быть создан вручную
ИЛИ
его можно создать автоматически , запустив программу от имени администратора один раз. Это даст программе необходимые разрешения, и когда она будет работать как обычно, она все равно будет работать правильно.
источник