【问题标题】:Can't read input file when compressed as a jar压缩为 jar 时无法读取输入文件
【发布时间】:2019-04-21 15:24:50
【问题描述】:

当我收到此错误时,我正在尝试在终端中运行 jar 文件:

我可以在我的 IDE 中正常运行此文件,但是当我将项目导出为 jar 时,它找不到该文件。这是错误指向的代码:

BufferedImage buttonIcon = ImageIO.read(new File("img/button.png"));
button = new JButton(new ImageIcon(buttonIcon));

【问题讨论】:

  • 尝试 ImageIO.read(getClass().getResource("img/button.png"));ImageIO.read(getClass().getResource("/img/button.png")); 如果其中任何一个失败,那么我将检查 Jar 文件的内容...
  • 非常感谢,成功了。

标签: java


【解决方案1】:

有两个问题。

  1. 您需要将文件放入 jar 中。
  2. 您需要使用getResourceAsStream(...) 才能使用类加载器从jar 中加载。

要验证 jar 文件中的图像是否存在,请使用命令 jar -tf jarfile.jar 并查看 button.png 是否在预期的 jar 中。如果不是,请考虑更改您的 jar 包装。

至于getResourceAsStream(...),有很多人已经提供了如何正确执行此操作。看看他们的答案。

【讨论】:

    【解决方案2】:

    如果您想从 JAR 中读取该文件,请使用:

    BufferedImage buttonIcon = ImageIO.read( getClass().getResourceAsStream("/classpath/to/my/file"));
    

    【讨论】:

    • 试过了,得到了这个错误:线程“main”java.lang.IllegalArgumentException中的异常:input == null!在 javax.imageio.ImageIO.read(Unknown Source)
    【解决方案3】:

    试试这个:

    String imgPath = "img/button.png";
    BufferedImage buffImage = ImageIO.read(getClass().getResourceAsStream(imgPath));
    

    【讨论】:

      【解决方案4】:

      使用以下内容:

      ImageIO.read(getClass().getClassLoader().getResource(path));
      

      确保路径不包含src 文件夹(但将图像保留在实际文件夹中)

      path = "image.jpg";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        相关资源
        最近更新 更多