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.
上記のメッセージを表示した後、シェルは期待どおりに起動しました。
デニスの答えは正しいです。しかし、私はもう少し詳しく(Windowsユーザーのために)解決策を説明したいと思います。
regedit
と入力します。HKEY_LOCAL_MACHINE\Software\JavaSoft
に移動します(Windows 10では、これがここにあります:HKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
)New
- > Key
をクリックします。Prefs
という名前を付けると、すべてうまくいくはずです。あるいは、以下の内容の*.reg
ファイルを保存して実行します。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs]
次のレジストリキーを手動で作成して問題を解決することができました。
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
これは実際にはJDKのバグです。何年にもわたって何度か報告されていますが、 8139507 だけがオラクルにようやく真剣に受け止められたのです。
問題はWindowsPreferences.Java
のJDKソースコードにありました。このクラスでは、両方のノード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用の backport もあります。
あなたが見ることは本当にJDKの内部ロガーからの警告です。例外ではありません。ユーザーコードが本当にシステム設定を望んでいるのでない限り、警告は無視しても差し支えないと私は思いますが、そうであることは非常にまれです。
Java 1.7.21より前のバージョンでは、このバグ自体は明らかになりませんでした。それまではJREインストーラがレジストリキーHKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
を作成していたため、事実上バグが隠されていたためです。一方、あなたのマシンにJREをインストールするためにインストーラーを実行することを実際に要求されたことは一度もありませんでした。ご存知かもしれませんが、Oracleは長年にわたってJRE for Windowsを.tar.gz
形式で配布してきました。
誰かが64ビットバージョンのWindowsでこれを解決しようとしている場合は、次のキーを作成する必要があります。
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
問題は、単純なコンソールではレジストリを編集できないことです。手動でレジストリを編集する必要はありません。管理権限でgroovysh
を一度起動するだけです。それ以降の起動はすべてエラーなしで動作します。
Windows 8 64 bitで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ソリューションの使用に成功しました。あるいは、拡張子が "reg"のファイルを作成して、それに以下のように書き込めます。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]
...それを実行します。
次のようなメッセージが表示されました。
Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002
そして、それはこれらのレジストリキーの1つを作成した後になくなりました、私のものは64ビットですので、私はそれだけを試しました。
32 bit Windows
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
64 bit Windows
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
EclipseでGWTコンパイルプロジェクトを実行するときに同じ警告を受け取りました。承認された解決策もそれを修正しました。