我正在编写一个打包在两个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。
我已经四处寻找,但我找不到可以帮助我解决问题的解决方案。
答案 0 :(得分:0)
问题是当ResourceFile.class.getResource("/")
从仅包含jar的类路径运行时,null
将返回getResource
,这是因为null
在某些事情没有时返回ResourceFile.class.getProtectionDomain().getCodeSource().getLocation();
存在,并且在由jar组成的类路径中,根目录不被认为存在(根据jar的构建方式,其他目录可能存在也可能不存在)。如果类路径确实包含目录,则它实际上可能不会指向您期望的位置!
我猜你正在寻找jar的位置,你可以找到:
ResourceFile
假设foreach
是您自己jar中的一个类,而不是其他依赖项。请注意,这段代码生成的URL指向jar本身!
我不知道您的用例,但您可能需要仔细考虑这是否真的是您需要的。