2017-05-25 6 views
6

हमारे पास एक ऐसा मामला है जहां एक पीसी 88.0_092 का उपयोग कर एक जावा 8 एप्लिकेशन चला रहा है, Locale.getDefault() से शून्य लौटा रहा है। इस से निपटने के दौरान तुच्छ है, मैं अधिक चिंतित हूं कि शून्य वापस लौटाया जा रहा है, क्योंकि documentation विधि के लिए यह इंगित नहीं करता है कि शून्य संभव है। हम जावा कमांड लाइन से लोकेल सेट नहीं कर रहे हैं, और कहीं भी setDefault() पर कॉल नहीं कर रहे हैं।जावा 8 लोकेल.getDefault() वापस शून्य

इस स्थापना में क्या गलत हो सकता है कि Locale.getDefault() शून्य वापस आ जाएगा? क्या मैं जावा दस्तावेज़ को सही ढंग से नहीं पढ़ रहा हूं?

+0

सिस्टम के बारे में जानकारी उपयोगी होगी –

+1

क्या आप बस 'सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क) {System.out.println (Locale.getDefault()) चला सकते हैं;}' क्या आप यह सत्यापित कर सकते हैं कि ऐसा होता है एक ** स्वच्छ ** पर्यावरण? मैं पुन: पेश करने में असमर्थ हूं - मुझे दृढ़ता से लगता है कि यह आपके रनटाइम पर्यावरण के साथ कुछ विशिष्ट है। –

+0

आप हमेशा जावा स्रोत फाइलें खोल सकते हैं और वहां ब्रेकपॉइंट डाल सकते हैं और देख सकते हैं कि क्या हो रहा है। ओपन लोकेल स्रोत कोड getDefault में ब्रेकपॉइंट डालें और कॉल स्टैक का पालन करें। – tsolakp

उत्तर

1

जेडीके 1.8.0_092 के स्रोत कोड को देखते हुए मुझे लगता है कि Locale.getDefault() द्वारा लौटाया गया मान defaultLocale (Locale.java:2022) आता है।

private volatile static Locale defaultLocale = initDefault(); 

initDefault() बनाता है एक प्रमुख (LocaleKey) चर language, region, script, country और variant के आधार पर है, तो एक Cache वस्तु जो LocaleObjectCache<LocaleKey, Locale> है में खोज करते हैं।

ठीक है, मैं आपको अन्य विवरणों से परेशान नहीं करना चाहता हूं लेकिन संक्षेप में, यह कोड किसी दिए गए पर्यावरण के लिए मौजूदा LocaleKey के लिए मानचित्र में देख रहा है, इसलिए यह संभव है कि ऐसे लोकेल मौजूद न हों।

संबंधित मुद्दे