tutorial - java是什么




调试getResource* (4)

getResource调用正在寻找一个相对于类文件的文件。

我的第一个猜测是,当你编译你忘记把资源文件放入编译文件夹。 这就是我经常运行的东西。

如何调试失败的getResource风格的方法,返回null?

我相信它正在寻找的文件在那里,但它返回NULL。 我如何知道它正在寻找什么来尝试发现任何不匹配?


每当ClassLoader发生变化时,我都会遇到这种情况。

根据应用程序运行的确切上下文,ClassLoaders对资源文件的存在时间有不同的规则。 例如,在netbeans中,getResource不区分大小写,但在Sun的JRE中是这样的。

虽然不是直接回答你的问题,但我想你应该知道这一点(如果你还没有)。


由于getResource()搜索类路径(如其他人所提到的),所以在调用getResource()之前转储正在搜索的实际类路径可能会很有帮助:

log.debug("classpath is: " + System.getProperty("java.class.path"));

//the line that is returning null
... = Thread.currentThread().getContextClassLoader().getResource("foobar");

可能发生的事情是你认为在类路径上的文件/目录实际上不是(可能是一个无效的路径被设置在某处)。


您可以使用Eclipse调试模式,并在失败的方法上设置断点。 从那里,你可以一步一步在呼叫树,直到你看到什么失败。

最常见的是该文件不在那里,因为它没有复制那里或不在类路径等...





java