এটি আসলে একটি জেডিকে বাগ। এটি কয়েক বছর ধরে বেশ কয়েকবার প্রতিবেদন করা হয়েছে, তবে কেবল 8139507 এ অবশেষে ওরাকল এটিকে গুরুত্ব সহকারে গ্রহণ করেছিলেন।
সমস্যাটি ছিল জেডিকে উত্স কোডের জন্য 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
, ফলে সতর্কতার কারণ হবে। এটি একটি আকর্ষণীয় সূক্ষ্ম বাগ।
জুন ২০১K সালে জেডিকে উত্সের প্রতিশ্রুতিবদ্ধ একটি ফিক্স রয়েছে এবং এটি জাভা 9 এর পরে রয়েছে। জাভা 8 এর একটি ব্যাকপোর্টও রয়েছে যা u202 এ রয়েছে।
আপনি যা দেখছেন তা হ'ল জেডকে-র অভ্যন্তরীণ লগার থেকে একটি সতর্কতা। এটি ব্যতিক্রম নয়। আমি বিশ্বাস করি যে সতর্কতাটি নিরাপদে উপেক্ষা করা যেতে পারে .... যদি না ব্যবহারকারী কোডটি প্রকৃতপক্ষে সিস্টেমের পছন্দগুলি না চায় তবে এটি খুব কমই ঘটে।
বোনাস তথ্য
জাভা 1.7.21 এর পূর্ববর্তী সংস্করণগুলিতে বাগটি নিজেকে প্রকাশ করে নি, কারণ ততক্ষণে জেআরই ইনস্টলার HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
আপনার জন্য রেজিস্ট্রি কী তৈরি করবে এবং এটি বাগটি কার্যকরভাবে আড়াল করবে। অন্যদিকে আপনার মেশিনে একটি জেআরই রাখার জন্য আপনাকে ইনস্টলার চালানোর দরকার পড়েনি, বা কমপক্ষে এটি সান / ওরাকলের অভিপ্রায় নয়। আপনি যেমন জানেন যে ওরাকল .tar.gz
অনেক বছর ধরে উইন্ডোজের জন্য জেআরই ফর্ম্যাটে বিতরণ করে আসছে।