使用" class.getResource(" /")"时出现NullPointerException

时间:2017-01-22 09:03:43

标签: java

我正在编写一个打包在两个Jar文件中的应用程序:startup.jar和resource.jar。在resource.jar中,我有一个java文件(ResourceFile.java),代码如下:

String dir = ResourceFile.class.getResource("/").getPath();

应该通过运行" startup.jar"启动应用程序(两个jar文件放在同一个目录中),但是我总是在上面的代码中得到NullPointerException,我也尝试过更改它以下代码:

String dir = ResourceFile.class.getClassLoader().getResource("").getPath();

得到了同样的错误。

System.out.println(ResourceFile.class.getResource("/") == null);

print true。

我已经四处寻找,但我找不到可以帮助我解决问题的解决方案。

1 个答案:

答案 0 :(得分:0)

问题是当ResourceFile.class.getResource("/")从仅包含jar的类路径运行时,null将返回getResource,这是因为null在某些事情没有时返回ResourceFile.class.getProtectionDomain().getCodeSource().getLocation(); 存在,并且在由jar组成的类路径中,根目录不被认为存在(根据jar的构建方式,其他目录可能存在也可能不存在)。如果类路径确实包含目录,则它实际上可能不会指向您期望的位置!

我猜你正在寻找jar的位置,你可以找到:

ResourceFile

假设foreach是您自己jar中的一个类,而不是其他依赖项。请注意,这段代码生成的URL指向jar本身!

我不知道您的用例,但您可能需要仔细考虑这是否真的是您需要的。