Java jar没有从jar中读取文件,只有外部文件夹?

Noa*_*gle 1 java jar external

当我创建一个JAR时,JAR将不会读取其中的文件夹,只有JAR所在的文件夹中的文件夹.好的,那不是很具描述性.所以这是我编辑支持的照片.在此输入图像描述

我希望你现在明白这个想法.那么我该如何解决这个问题呢?我已经在eclipse中拥有了res和stats构建路径的一部分,现在是什么?

我用来读取资源的代码:

Image player; player = new ImageIcon("res/player.png").getImage();

Mad*_*mer 5

当使用ImageIcon并传递它时String,它期望参数引用a File.

来自JavaDocs

从指定的文件创建ImageIcon....指定的String可以是文件名或文件路径

文件和"资源"是不同的东西.

相反,尝试使用更像......的东西

new ImageIcon(getClass().getResource("res/player.png"));
Run Code Online (Sandbox Code Playgroud)

假设它res/player.png位于res目录一侧的jar中.

根据与尝试加载资源的类的关系以及资源的位置,您可能需要使用

new ImageIcon(getClass().getResource("/res/player.png"));
Run Code Online (Sandbox Code Playgroud)

代替...

更新

正如EJP指出的那样,您应该为可能找不到资源的情况做好准备.

URL url = getClass().getResource("/res/player.png");
ImageIcon img = null;
if (url != null) {
    img = new ImageIcon(url);
}
// Deal with null result...
Run Code Online (Sandbox Code Playgroud)

你应该ImageIO.read用来阅读图像.除了它支持更多(并且可以支持更多未来)图像格式的事实之外,它在返回之前加载图像并且IOException如果图像无法读取则抛出...

URL url = getClass().getResource("/res/player.png");
ImageIcon icon = null;
if (url != null) {
    try {
        BufferedImage img = ImageIO.read(url);
        icon = new ImageIcon(img);
    } catch (IOException exp) {
        // handle the exception...
        exp.printStackTrace();
    }
}
// Deal with null result...
Run Code Online (Sandbox Code Playgroud)

  • 并确保getResource()结果不为null. (2认同)