导出的 Jar 文件不会读取 jar 中的文件

Exported Jar file won't read file inside jar

在下面的代码示例中,当我在 Eclipse 中测试代码时,它工作正常。但是,当我导出 jar 文件并通过命令行对其进行测试时,它会抛出错误:IIOException: Can't read input file!

private BufferedImage img = null;
private String imgSource;

if (img == null)
{
    try {
        URL url = getClass().getResource("Images/questionMark.png");
        System.out.println(url.getPath()); 
        /* This prints: file:/C:/Users/Keno/Documents/javaFile.jar!/javaFile/Images/questionMark.png */
        File file = new File(url.getPath());
        img = ImageIO.read(file);
        imgSource = file.getName();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我要获取的文件位于 javaFile 包内的 Images 文件夹中。我注意到一件事可能表明问题所在。

  1. 在我的打印语句中,我注意到 javaFile.jar 部分末尾有一个感叹号。那是对的吗?这是否表明文件或结构存在问题?

此外,以防万一有人对我应该如何加载文件有更好的建议,我会告诉你我的意图。我想从 jar 中的相对位置(图像文件夹)加载文件。我想显示它(已在我的实际代码中完成)并存储位置以稍后传递给另一个函数(也已完成)。

您应该尝试检查您的 class 是否与 jar 中的图像位于同一目录中。

   |
   |- Your class
   |- Images
       |- questionMark.png

此外,您是否尝试过直接使用您的 url 对象?

File file = new File(url);

试试这个

public void test() {
    try(InputStream is = getClass().getResourceAsStream("Images/questionMark.png")) {
        ImageIO.read(is);
    } catch (IOException e) {
        e.printStackTrace();
    }
}