2017-05-25 129 views
6

我们有一种情况,运行使用1.8.0_092的Java 8应用程序的PC从Locale.getDefault()返回null。虽然处理这个很简单,但我更担心返回null,因为该方法的documentation并不表示null是可能的。我们不是从java命令行设置语言环境,并且不在任何地方调用setDefault()Java 8 Locale.getDefault()返回null

此安装中可能出现的错误Locale.getDefault()将返回null?我没有正确阅读Java文档吗?

+0

关于系统的信息将会很有用 –

+1

你能简单的运行一个'public static void main(String [] args){System.out.println(Locale.getDefault());}'你可以验证这发生在一个**干净的**环境?我无法重现 - 我强烈认为这是您的运行时环境特定的东西。 –

+0

您可以随时打开Java源文件并在其中放置断点并查看发生了什么。打开语言环境源代码在getDefault中放置断点并按照调用堆栈。 – tsolakp

回答

1

查看JDK 1.8.0_092的源代码我看到由Locale.getDefault()返回的值来自字段defaultLocale(Locale.java:2022)。

private volatile static Locale defaultLocale = initDefault(); 

initDefault()构建基于变量languageregionscriptcountryvariant的密钥(LocaleKey),则搜索到Cache对象,它是LocaleObjectCache<LocaleKey, Locale>

嗯,我不想打扰你与其他细节,但实质上,这个代码正在寻找一个现有LocaleKey地图为给定的环境,所以这可能是这种语言环境不存在。