在Java中加载资源

时间:2015-05-12 15:39:44

标签: java resources classpath classloader

我有一个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文件的内容时,我可以在正确的位置看到资源。

2 个答案:

答案 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