我有一个Java项目并且必须加载诸如声音或图像之类的资源,这些资源非常有效,直到我将其导出到jar文件中,然后应用程序崩溃,因为我无法访问资源。经过一些研究,我发现我应该使用getClass().getClassLoader().getResource()
或Class.getResource()
。但是在使用第一个或第二个函数尝试所有可能性之后,无论是否有前导/
,但每次都得到null
作为结果,并使用res/images/bg.jpg
作为参数。我的项目层次结构如下所示:
|src
|Main.java
|res
|images
|bg.jpg
我在Stack Overflow或Google上找到的解决方案都没有为我工作。我做错了什么,我应该用什么?
修改
当导出为jar时,我只是右键单击Eclipse上的项目(不使用任何插件),导出并选择runnable jar并显式声明我的类Main作为Classpath。检查jar文件的内容时,我可以在正确的位置看到资源。
答案 0 :(得分:0)
res文件夹应该是src文件夹的子文件
|src
|Main.java
|res
|images
|bg.jpg
虽然标准做法是让布局更接近
|src
| main
|java
|package
|Main.java
|resources
|images
|bp.jpg
答案 1 :(得分:0)
上次这样的事情发生在我身上,原因是我的构建没有将文件复制到jar中。可能值得通过列出jar中的文件来进行健全性检查:
jar tf /path/to/your.jar