无法从jar加载资源

时间:2014-09-10 06:27:33

标签: java eclipse jar

我在尝试将我的java项目导出到runnable jar时遇到了问题。代码在eclipse中运行,但导出后无法获取资源。我在eclipse中的目录结构

project_A - src - package_a - a.java
                            - res - b.png
jar中的

结构

A - src - A.class
    res - b.png
    META-INF - MANIFEST

MANIFEST中的内容

Manifest-Version: 1.0  
Class-Path: .  
Main-Class: project_A.A_class

我使用以下代码获取图片资源

URL url = getClass().getResource("res/b.png");          
img_bg = ImageIO.read(url);

此代码在Eclipse中有效,但仅适用于相对路径,如果我将res dir设置为与src dir相同的级别,上面的代码也不起作用,则返回输入为null 。

我无法看到这个程序在执行jar时得到的路径,不知道如何在没有输出信息的情况下进行调试。

所以任何人都可以帮我弄清楚什么是正确的结构以及如何在jar中获取图像?


我的错误,第一个日蚀结构是错误的,它的结构与Betlista的anwser相同

1 个答案:

答案 0 :(得分:1)

我想,你的问题中有几个错误的陈述,我的项目如下:

enter image description here

这是ResourceTest

的内容
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;


public class ResourceTest {

    public static void main(String[] args) throws IOException {
        URL resource = ResourceTest.class.getResource("/pict.png");
        assert resource != null : "Resource is null";
        ImageIO.read(resource);
    }

}

我导出了res_test.jar,当我运行java -jar res_test.jar时,它对我有效。

jar的内容是

res_test.jar
+- META-INF
   +- MANIFEST.MF
+- pict.png
+- ResourceTest.class

和MANIFEST.MF的内容是

Manifest-Version: 1.0
Class-Path: .
Main-Class: ResourceTest