故意破坏以下代码以识别 NullPointerException 的来源,这本来应该非常简单,但结果让我抓狂:
Properties properties = new Properties();
Thread currentThread = Thread.currentThread();
ClassLoader contextClassLoader = currentThread.getContextClassLoader();
InputStream propertiesStream = contextClassLoader.getResourceAsStream("resource.properties");
if (propertiesStream != null) {
properties.load(propertiesStream);
// TODO close the stream
} else {
// Properties file not found!
}
我得到“找不到属性文件!” 错误,即 contextClassLoader.getResourceAsStream("resource.properties"); 返回 null。
这是一个基于 CXF 的客户端,我验证了“resource.properties”文件位于客户端 jar 所在(并运行)的当前目录中。
我还通过包含以下诊断代码验证了绝对路径:
File file = new File("resource.properties");
System.out.println(file.getAbsolutePath());
绝对路径指向客户端的 jar 所在的位置。
我还尝试使用以下方法找出类加载器的上下文:
System.out.println(Thread.currentThread().getContextClassLoader());
但是这里展示了一些目录结构,我得到的只是:
com.simontuffs.onejar.JarClassLoader@1decdec
为什么 ClassLoader.getResourceAsStream() 会返回 null?
我错过了什么?