调试getResource *

时间:2008-10-31 10:25:54

标签: java

如何调试失败的getResource样式方法,返回null?

我确定它正在寻找的文件存在,但它返回NULL。我怎么知道它想要发现什么不匹配?

5 个答案:

答案 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类的方法。