如何调试失败的getResource样式方法,返回null?
我确定它正在寻找的文件存在,但它返回NULL。我怎么知道它想要发现什么不匹配?
答案 0 :(得分:15)
由于getResource()
搜索类路径(正如其他人提到的那样),在问题getResource()
调用之前转储正在搜索的实际类路径可能会有所帮助:
log.debug("classpath is: " + System.getProperty("java.class.path"));
//the line that is returning null
... = Thread.currentThread().getContextClassLoader().getResource("foobar");
可能发生的事情是你认为在类路径上的文件/目录实际上不是(可能在路上某处设置了无效路径)。
答案 1 :(得分:4)
您可以使用Eclipse-debug-mode并在失败的方法上设置断点。从那里你可以在调用树中一步一步地向下看,直到你看到失败的结果。
最常见的是该文件不存在,因为它没有在那里复制或者不在类路径等中...
答案 2 :(得分:3)
getResource调用正在查找相对于类文件的文件。
我的第一个猜测是,当您编译时,您忘记将资源文件放入编译文件夹中。这就是我经常运行的。
答案 3 :(得分:0)
每当ClassLoader发生变化时,我都会遇到这种情况。
根据应用程序运行的确切上下文,ClassLoaders对资源文件的存在时间有不同的规则。例如,在netbeans中,getResource不区分大小写,但在Sun的JRE中它是。
虽然没有直接回答你的问题,但我认为你应该知道这一点(如果你还没有)。
答案 4 :(得分:0)
我认为您应该告诉Eclipse或您喜欢的IDE,其中可以找到JDK(JRE)源文件。然后,您也可以介入Java Runtime类的方法。