Groovy Shell警告“无法打开/创建prefs根节点......”

时间:2013-05-07 20:35:32

标签: windows groovy groovyshell

我尝试在Windows 8上打开Groovy Shell(groovysh)并获得以下输出:

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.

打印完上述消息后,shell按预期启动。

10 个答案:

答案 0 :(得分:315)

丹尼斯的回答是正确的。但是,我想以更详细的方式解释该解决方案(对于Windows用户):

  1. 进入“开始”菜单,在搜索栏中输入regedit
  2. 导航到路径HKEY_LOCAL_MACHINE\Software\JavaSoft(Windows 10现在似乎已在此处显示:HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
  3. 右键单击JavaSoft文件夹,然后单击New - &gt; Key
  4. 为新密钥Prefs命名,一切都应该有效。
  5. 或者,保存并执行包含以下内容的*.reg文件:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
    

答案 1 :(得分:71)

我能够通过手动创建以下注册表项来解决问题:

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs

答案 2 :(得分:39)

这实际上是一个JDK错误。多年来已经多次报道过这种情况,但只有在8139507,甲骨文才最终认真对待它。

问题出在WindowsPreferences.java的JDK源代码中。在此类中,节点userRootsystemRoot都声明为静态,如:

/**
 * 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(=系统树)的注册表项将被尝试创建,它还不存在。

因此,即使用户在他自己的代码中采取了所有预防措施并且从未触及或引用过系统树,那么JVM实际上仍会尝试实例化systemRoot,从而导致警告。这是一个有趣的微妙错误。

在2016年6月,有一个修复程序致力于JDK源代码,它是Java9以后的一部分。 Java8中还有一个backport,位于u202。

您看到的内容实际上是来自JDK内部记录器的警告。这不是一个例外。我相信可以安全地忽略警告....除非用户代码确实需要系统首选项,但这种情况很少发生。

奖金信息

在Java 1.7.21之前的版本中,错误没有显示出来,因为在此之前,JRE安装程序会为您创建注册表项HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs,这样可以有效地隐藏错误。另一方面,您从未真正需要运行安装程序才能在您的计算机上安装JRE,或者至少这不是Sun / Oracle的意图。您可能知道Oracle多年来一直以.tar.gz格式分发Windows的JRE。

答案 3 :(得分:30)

如果有人试图在64位版本的Windows上解决此问题,您可能需要创建以下密钥:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

答案 4 :(得分:6)

问题是简单的控制台无法编辑注册表。无需手动编辑注册表,只需使用管理权限启动groovysh一次即可。所有后续启动都可以正常运行。

答案 5 :(得分:2)

在Windows 8 64位上启动apache jmeter时出现类似问题:

[]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.

使用Mkorsch解释成功使用Dennis Traub解决方案。或者您可以创建一个扩展名为&#34; reg&#34;的文件。并写下以下内容:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

...然后执行它。

答案 6 :(得分:1)

我收到以下消息:

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

答案 7 :(得分:1)

这发生在我身上。

显然这是因为Java没有创建注册表项的权限。

请参阅:Java: java.util.Preferences Failing

答案 8 :(得分:0)

在Eclipse中执行GWT编译项目时,得到相同的警告。接受的解决方案也将其修复。

答案 9 :(得分:0)

问题确实是缺少注册密钥。可以手动创建

OR

可以通过以管理员身份运行一次程序来自动创建。这将为程序提供所需的权限,并且在正常运行时仍可以正常运行。