Groovy Shell की चेतावनी "Prefs रूट नोड नहीं खोल / बना सकता ..."


188

मैंने groovyshविंडोज 8 पर ग्रूवी शेल ( ) खोलने की कोशिश की और निम्नलिखित आउटपुट मिला:

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.

उपरोक्त संदेश को प्रिंट करने के बाद शेल उम्मीद के मुताबिक शुरू हुआ।



1
बैकिंग स्टोर के रूप में एक फ़ाइल में सहेजी गई प्राथमिकताएं पूरी तरह से समस्या से बचना चाहिए। ऐसी परिस्थितियाँ हैं जहाँ एंड-यूज़र्स पर भरोसा करते हुए अपनी घृणित रजिस्ट्री को बदलना एक व्यवहार्य समाधान नहीं है।
डेव जार्विस

2
यह एक ज्ञात जावा बग है जो अभी भी वाइंडोव्स 10 पर है और 112 अपडेट करता है। बस एक बार एलिवेटेड प्रॉम्प्ट से प्रोग्राम चलाएं और यह चला जाता है।
david.pfx

जवाबों:


328

डेनिस का जवाब सही है। हालाँकि मैं इस समाधान को थोड़ा और विस्तृत तरीके से (विंडोज यूजर के लिए) समझाना चाहूँगा:

  1. अपने स्टार्ट मेनू में जाएं और regeditसर्च फील्ड में टाइप करें।
  2. पथ पर नेविगेट करें HKEY_LOCAL_MACHINE\Software\JavaSoft(विंडोज 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]

7
क्या यह व्यावहारिक रूप से करना संभव है?
फेसेटो

12
मैं पुष्टि कर सकता हूँ कि अगर यह HKEY_CURRENT_USER के तहत काम नहीं करेगा। एक बेहतर सवाल, पृथ्वी पर एक जावा-आधारित उत्पाद विंडोज रजिस्ट्री के लिए खुद को क्यों बांध रहा है?
avgvstvs

5
उपभोक्ता एप्लिकेशन के लिए यह संभव नहीं है कि वह रजिस्ट्री के साथ उपयोगकर्ता को जाने और फिडेल करे। जावा हमेशा इस तरह आधे-अधूरे समाधान क्यों लागू करता है।
एल मैक

15
मेरे विंडोज 10 इंस्टॉल में ऊपर दिए गए दोनों प्रमुख रास्ते हैं, मेरी स्थापना को ठीक करने के लिए आवश्यक Prefs को जोड़ने के लिए HKEY_LOCAL_MACHINE \ Software \ JavaSoft नहीं HKEY_LOCAL_MACHINE \ Software \ WOW6432Dode \ JavaSoft
gt124

2
विंडोज 10 पर अभी भी Perfs फ़ोल्डर के लिए सही स्थान हैHKEY_LOCAL_MACHINE\Software\JavaSoft
आर्थर

72

मैं निम्नलिखित रजिस्ट्री कुंजी को मैन्युअल रूप से बनाकर समस्या को हल करने में सक्षम था:

HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs

क्या आप मुझे सटीक प्रक्रिया बताएंगे? मैं मुख्य रूप से मैक पर काम करता हूं लेकिन मुझे यह त्रुटि तब हो रही है जब मैं विंडोज पर अपना प्रोग्राम चलाता हूं और मैं जानना चाहता हूं कि इसे कैसे ठीक किया जाए।
मेशुलम सिल्क

14
मैं इसे सॉफ्टवेयर पर देख रहा हूं जिसे हम बेचते हैं। यदि आपने उनमें से एक भी प्राप्त किया है, तो एक स्वचालित / प्रोग्रामेटिक फिक्स बेहतर होगा। मेरे अंतिम उपयोगकर्ताओं को regedit में कूदना एक डरावना संभावना है। क्या विंडोज 8.1 पर यह स्वचालित रूप से करने के लिए जावा प्राप्त करने का एक तरीका है (जो कि एकमात्र मंच है जिस पर मुझे त्रुटि दिखाई देती है)।
ब्रायन नोब्लुच

विंडोज 10 में भी त्रुटि होती है, और यह फिक्स काम करता है
ट्रायम्फस्ट

45

यह वास्तव में JDK बग है। यह वर्षों में कई बार रिपोर्ट किया गया है, लेकिन केवल 8139507 में यह अंततः ओरेकल द्वारा गंभीरता से लिया गया था।

समस्या 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(= सिस्टम ट्री) बनाने की कोशिश की जाएगी यदि यह पहले से मौजूद नहीं है।

इसलिए, भले ही उपयोगकर्ता ने प्रत्येक एहतियात को अपने कोड में लिया हो और सिस्टम ट्री को कभी भी छुआ या संदर्भित नहीं किया हो, तो जेवीएम वास्तव में अभी भी तुरंत प्रयास करेगा systemRoot, इस प्रकार चेतावनी का कारण बनता है। यह एक दिलचस्प सूक्ष्म बग है।

जून 2016 में JDK स्रोत के लिए प्रतिबद्ध एक फिक्स है और यह Java9 का हिस्सा है। Java8 के लिए एक बैकपोर्ट भी है जो u202 में है।

आप जो देख रहे हैं वह वास्तव में जेडीके के आंतरिक लकड़हारे की चेतावनी है। यह अपवाद नहीं है। मेरा मानना ​​है कि चेतावनी को सुरक्षित रूप से अनदेखा किया जा सकता है .... जब तक कि उपयोगकर्ता कोड वास्तव में सिस्टम वरीयताओं को नहीं चाहता है, लेकिन ऐसा बहुत कम ही होता है।

बोनस की जानकारी

जावा 1.7.21 से पहले बग ने संस्करणों में खुद को प्रकट नहीं किया, क्योंकि तब तक JRE इंस्टॉलर आपके लिए रजिस्ट्री कुंजी बना देगा HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefsऔर यह बग को प्रभावी ढंग से छिपाएगा। दूसरी तरफ आपको अपनी मशीन पर JRE लगाने के लिए कभी भी एक इंस्टॉलर को चलाने की आवश्यकता नहीं होती है, या कम से कम यह Sun / Oracle का इरादा नहीं रहा है। जैसा कि आप जानते हैं कि ओरेकल .tar.gzकई वर्षों से प्रारूप में विंडोज के लिए जेआरई वितरित कर रहा है ।


इस तरह के एक गहन विश्लेषण के लिए धन्यवाद। मुद्दा 8139507 , कि तुम उल्लेख किया है, का कहना है कि बग JDK 9. में तय हो गई है
realsonic

3
@realsonic। इसे जोड़ना: ऐसा लगता है कि ओरेकल आखिरकार इस फिक्स को वापस लाने के लिए तैयार हो गया। यह 8u202 में तय किया गया है । (30Sep2018 के अनुसार Java 8 की नवीनतम रिलीज़ u181 है, इसलिए यह फिक्स बैकपोर्ट है, लेकिन अभी तक किसी भी रिलीज़ किए गए संस्करण में नहीं है)
peterh

30

यदि कोई इसे 64-बिट संस्करण पर Windows में हल करने का प्रयास कर रहा है, तो आपको निम्न कुंजी बनाने की आवश्यकता हो सकती है:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

9
64-बिट विंडोज 7 पर 64-बिट जेवीएम का उपयोग करते समय मुझे यह त्रुटि मिली, और डेनिस और एमकेर्श ने जो समाधान प्रस्तावित किया वह मेरे लिए ठीक काम किया। शायद Wow6432Node समाधान 64-बिट विंडोज पर 32-बिट जेवीएम के लिए है।
स्कॉट जॉनसन

7

समस्या यह है कि सरल कंसोल रजिस्ट्री को संपादित नहीं कर सकता है। रजिस्ट्री को हाथ से संपादित करने की आवश्यकता नहीं है, बस groovyshएक बार प्रशासनिक प्रिविलेज के साथ लॉन्च करें । सभी बाद के लॉन्च त्रुटि के बिना काम करते हैं।


2
धन्यवाद, मैं दूसरों को यह कोशिश करने के लिए सुझाव
आदित्य टी

1
सबसे आसान उत्तर, शीर्ष पर होना चाहिए। मैंने इस चेतावनी को जेएमटर परीक्षणों को निष्पादित किया था, लेकिन मैंने एक बार jmeter.bat को प्रशासक के रूप में शुरू किया था और चेतावनी चली गई है।
KB

2

विंडोज 8 64 बिट पर अपाचे जेमीटर शुरू करते समय एक समान समस्या थी:

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

Morsorsch स्पष्टीकरण के साथ सफलतापूर्वक डेनिस Traub समाधान का उपयोग किया। या आप एक्सटेंशन "reg" के साथ एक फाइल बना सकते हैं और उसमें निम्नलिखित लिख सकते हैं:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]

... तो उस पर अमल करो।


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

1

मेरे साथ ऐसा हुआ।

जाहिरा तौर पर यह इसलिए है क्योंकि जावा में रजिस्ट्री कुंजी बनाने की अनुमति नहीं है।

देखें: जावा: java.util.Preferences असफलता


ठीक है, अधिक सटीक इसलिए है क्योंकि JDK में एक बग है। अपने उत्तर में लिंक पर स्वीकृत उत्तर देखें।
पीटर

यह वास्तव में बग नहीं है - मशीन-चौड़ी सेटिंग्स केवल मशीन व्यवस्थापक उपयोगकर्ताओं के लिए अनुमत हैं। runasअपने एप्लिकेशन को स्थानीय व्यवस्थापक उपयोगकर्ता के रूप में चलाने के लिए उपयोग करें और यह HKLM के तहत रजिस्ट्री कुंजी को खुशी से बनाएगा। जावा के पास एलिवेटेड परमिटिसिस (यानी आदर्श रूप से यह विंडोज यूएसी को फेल करने के बजाय मांगना होगा - यह सार्वभौमिक अच्छा विचार है कि क्या यह संदिग्ध है) के लिए पूछने के लिए एक तंत्र नहीं है।
ddimitrov

0

समस्या वास्तव में रजिस्टर कुंजी है जो गायब है। इसे मैन्युअली बनाया जा सकता है

या

यह प्रोग्राम को एक बार प्रशासक के रूप में चलाकर स्वचालित रूप से बनाया जा सकता है । यह कार्यक्रम को आवश्यक अनुमति देगा, और जब इसे सामान्य रूप से चलाया जाएगा तब भी यह सही ढंग से काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.