Java 调用TimeZone.getAvailableIDs()时出现NullPointerException

Java 调用TimeZone.getAvailableIDs()时出现NullPointerException,java,timezone,nullpointerexception,Java,Timezone,Nullpointerexception,我尝试了许多代码示例,基本上都是这样做的 String[] IDs = java.util.TimeZone.getAvailableIDs(); 但它不起作用。 我还尝试了另一帧示例代码,即,它返回: at sun.util.calendar.ZoneInfoFile.getZoneIDs(ZoneInfoFile.java:785) at sun.util.calendar.ZoneInfo.getAvailableIDs(ZoneInfo.java:560) at java.util.T

我尝试了许多代码示例,基本上都是这样做的

String[] IDs = java.util.TimeZone.getAvailableIDs();
但它不起作用。 我还尝试了另一帧示例代码,即,它返回:

at sun.util.calendar.ZoneInfoFile.getZoneIDs(ZoneInfoFile.java:785)
at sun.util.calendar.ZoneInfo.getAvailableIDs(ZoneInfo.java:560)
at java.util.TimeZone.getAvailableIDs(TimeZone.java:508)
at TimeZoneDemo.main(uu.java:6)
我还试图重新安装JRE和JDK,但错误依然存在。那有什么意义呢?
当我尝试做
String[]eg={“一”,“二”}有效。

您会在此处发现相同的问题:

建议:

下载并运行最新的tzupdater工具,看看它是否解决了问题:


如果您使用的是Ubuntu 16.04,请尝试此功能

sudo apt-add-repository ppa:justinludwig/tzdata
sudo apt-get update
sudo apt-get install tzdata-java

这不应该发生,听起来好像tz zoneinfo文件出了问题。你是如何调用java进程的?是的,我先用javac编译,然后用java运行,它返回了这个异常。你能发布完整的异常吗?另外,发布的异常是您从示例中获得的还是从tutorialspoint.com获得的链接异常?您可以发布完整的示例代码吗?还要确认是否将$JAVA_HOME环境变量设置为您期望的JDK或JRE所在的位置?或者任何可能使它在zoneinfo数据的错误位置出现的内容。文件通常位于$JAVA_HOME/jre/lib/zi/**(如果您只有jre而不是JDK,那么jre/part可能是可选的)什么linux发行版?您是否包含了所有建议的软件包(当您从软件包管理器安装JRE/JDK时)。提示:许多发行版将zoneinfo打包为一个单独的包,这样它就可以独立于主要的JRE/JDK进行更新(因为有些国家每年都会更改DST切换日期)。在CentOS上,我有包“tzdata java.noarch”,但其他distos有不同的包名。尝试从Sun/Oracle站点下载JDK,看看问题是否消失。然后查找您的distos tzdata包名称并确保它已安装。正如我前面所说,当我尝试执行/tzupdater.jar--update时,它返回/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/zi上的无法读取ZoneInfo映射,而在该文件夹中没有任何内容。谢谢,@Gavy。为我工作。有关更多内容,请参见--我必须在上面两行之间
sudo获得更新
。如果这对您有效,请接受我的回答并投赞成票。谢谢我对它投了更高的票,但不能接受它作为答案,因为我不是OP。我可以确认这是在Ubuntu Xenial 16.04和OpenJDK 7上工作的。(OpenJDK 8不需要这个,因为时区数据已经包含在包中了)。谢谢@Gavy,这是UBUNTU 16.04上唯一的解决方案,