Saya mencoba membuka Shell Groovy ( groovysh
) pada Windows 8 dan mendapatkan output berikut:
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.
Setelah mencetak pesan di atas, shell mulai seperti yang diharapkan.
windows
groovy
groovyshell
Dennis Traub
sumber
sumber
Jawaban:
Jawaban Dennis benar. Namun saya ingin menjelaskan solusinya dengan cara yang sedikit lebih rinci (untuk Pengguna Windows):
regedit
kolom pencarian.HKEY_LOCAL_MACHINE\Software\JavaSoft
(Windows 10 tampaknya sekarang memiliki ini di siniHKEY_LOCAL_MACHINE\Software\WOW6432Node\JavaSoft
:)New
->Key
Prefs
dan semuanya harus berfungsi.Atau, simpan dan jalankan
*.reg
file dengan konten berikut:sumber
HKEY_LOCAL_MACHINE\Software\JavaSoft
Saya dapat menyelesaikan masalah dengan secara manual membuat kunci registri berikut:
sumber
Ini sebenarnya adalah bug JDK. Telah dilaporkan beberapa kali selama bertahun-tahun, tetapi hanya pada 8139507 yang akhirnya dianggap serius oleh Oracle.
Masalahnya adalah dalam kode sumber JDK untuk
WindowsPreferences.java
. Di kelas ini, kedua nodeuserRoot
dansystemRoot
dinyatakan statis seperti pada:Ini berarti bahwa pertama kali kelas direferensikan, kedua variabel statis akan diinisiasi dan dengan ini Kunci Registri untuk
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
(= susunan sistem) akan dicoba dibuat jika belum ada.Jadi, bahkan jika pengguna mengambil setiap tindakan pencegahan dalam kodenya sendiri dan tidak pernah menyentuh atau merujuk pohon sistem, maka JVM sebenarnya akan tetap mencoba untuk instantiate
systemRoot
, sehingga menyebabkan peringatan. Ini adalah bug halus yang menarik.Ada perbaikan yang dilakukan pada sumber JDK pada Juni 2016 dan itu adalah bagian dari Java9 dan seterusnya. Ada juga backport untuk Java8 yang ada di u202.
Apa yang Anda lihat sebenarnya adalah peringatan dari pencatat internal JDK. Ini bukan pengecualian. Saya percaya bahwa peringatan itu dapat diabaikan dengan aman .... kecuali kode pengguna memang menginginkan preferensi sistem, tetapi itu sangat jarang terjadi.
Info bonus
Bug tidak mengungkapkan dirinya dalam versi sebelum Java 1.7.21, karena sampai saat itu installer JRE akan membuat kunci Registry
HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
untuk Anda dan ini akan secara efektif menyembunyikan bug. Di sisi lain Anda tidak pernah benar-benar diminta untuk menjalankan installer untuk memiliki JRE pada mesin Anda, atau setidaknya ini bukan niat Sun / Oracle. Seperti yang Anda ketahui, Oracle telah mendistribusikan JRE untuk Windows dalam.tar.gz
format selama bertahun-tahun.sumber
Jika ada yang mencoba menyelesaikan ini pada versi 64-bit Windows, Anda mungkin perlu membuat kunci berikut:
sumber
Masalahnya adalah konsol sederhana tidak dapat mengedit registri. Tidak perlu mengedit registri dengan tangan, cukup luncurkan
groovysh
sekali dengan hak administratif. Semua peluncuran berikutnya bekerja tanpa kesalahan.sumber
Punya masalah serupa ketika memulai apache jmeter di windows 8 64 bit:
Solusi Dennis Traub berhasil digunakan, dengan penjelasan Mkorsch. Atau Anda dapat membuat file dengan ekstensi "reg" dan menulis ke dalamnya sebagai berikut:
... lalu jalankan.
sumber
Saya mendapatkan pesan berikut:
dan itu hilang setelah membuat salah satu kunci registri ini, milik saya 64 bit jadi saya mencoba hanya itu.
sumber
Ini terjadi pada saya.
Ternyata itu karena Java tidak memiliki izin untuk membuat kunci registri.
Lihat: Java: java.util.Preferensi Gagal
sumber
runas
untuk menjalankan aplikasi Anda sebagai pengguna admin lokal dan dengan senang hati akan membuat kunci registri di bawah HKLM. Apa yang tidak dimiliki Java adalah mekanisme untuk meminta permisison tinggi (yaitu idealnya akan menggunakan Windows UAC dan bukannya gagal - patut dipertanyakan apakah itu ide bagus secara universal).Masalahnya memang kunci register yang hilang. Itu dapat dibuat secara manual
ATAU
itu dapat dibuat secara otomatis dengan menjalankan program sebagai administrator sekali. Itu akan memberi program izin yang diperlukan, dan ketika itu akan dijalankan seperti biasa itu akan tetap bekerja dengan benar.
sumber