196

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.

上記のメッセージを出力した後、シェルは期待どおりに起動しました。

4

9 に答える 9

336

デニスの答えは正しいです。ただし、ソリューションをもう少し詳しく説明したいと思います(Windowsユーザー向け):

  1. スタート メニューに移動しregedit、検索フィールドに入力します。
  2. パスに移動しますHKEY_LOCAL_MACHINE\Software\JavaSoft(Windows 10 では、ここにあるようですHKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft:)
  3. JavaSoft フォルダーを右クリックし、New->をクリックします。Key
  4. 新しいキーに名前Prefsを付けると、すべてが機能するはずです。

*.regまたは、次の内容のファイルを保存して実行します。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
于 2013-07-09T15:58:12.577 に答える
75

次のレジストリ キーを手動で作成することで、問題を解決できました。

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
于 2013-05-07T20:35:31.707 に答える
49

これは実際には 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ため、警告が発生します。興味深い微妙なバグです。

2016 年 6 月に JDK ソースにコミットされた修正があり、これは Java9 以降の一部です。u202 には Java8 用のバックポートもあります。

表示されるのは、実際には JDK の内部ロガーからの警告です。例外ではありません。ユーザーコードが実際にシステム設定を必要としない限り、警告は安全に無視できると思いますが、それはほとんどありません。

ボーナス情報

このバグは、Java 1.7.21 より前のバージョンでは明らかになりませんでした。それまでは、JRE インストーラーがレジストリ キーHKEY_LOCAL_MACHINE\Software\JavaSoft\Prefsを作成し、これによりバグが効果的に隠されていたためです。一方で、マシンに JRE をインストールするためにインストーラを実行する必要が実際にあったことは一度もありません。少なくとも、これは Sun/Oracle の意図ではありませんでした。ご存知かもしれませんが、Oracle は.tar.gz長年にわたって Windows 用の JRE を形式で配布してきました。

于 2016-12-14T19:51:40.057 に答える
32

誰かが Windows の 64 ビット バージョンでこれを解決しようとしている場合は、次のキーを作成する必要がある場合があります。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
于 2013-12-27T09:28:00.083 に答える
7

問題は、単純なコンソールがレジストリを編集できないことです。手動でレジストリを編集する必要はありませんgroovysh。管理者権限で一度起動するだけです。以降のすべての起動はエラーなしで機能します。

于 2016-09-04T11:49:26.893 に答える
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.

デニス・トラウブの解法をムコルシュの説明とともにうまく使いました。または、拡張子が「reg」のファイルを作成して、次のように書き込むこともできます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

...それを実行します。

于 2015-05-11T12:03:35.613 に答える
1

これは私に起こりました。

どうやら、Java にはレジストリ キーを作成する権限がないためです。

参照: Java: java.util.Preferences の失敗

于 2016-10-25T07:47:09.457 に答える