您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Groovy Shell警告“无法打开/创建首选根节点……”

Groovy Shell警告“无法打开/创建首选根节点……”

我想以更详细的方式来解释该解决方案(对于Windows用户):

或者,保存并执行*.reg包含以下内容文件

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

这实际上是一个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不存在,则将尝试为此创建注册表项(=系统树)。

因此,即使用户在自己的代码中采取了所有预防措施,并且从未接触或引用系统树,JVM仍将实际尝试实例化systemRoot,从而引起警告。这是一个有趣的细微错误

JDK源代码已在2016年6月发布了一个修复程序,它是Java9以后的一部分。还有一个反向移植了Java8这是U202。

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

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

其他 2022/1/1 18:14:35 有564人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶