【问题标题】:Exporting image in runnable jar doesn't work在可运行的 jar 中导出图像不起作用
【发布时间】:2015-01-13 11:34:58
【问题描述】:

我在 java 中遇到了一个奇怪的问题。我想创建一个可运行的 jar: 这是我唯一的课程:

public class Launcher {

public Launcher() {
    // TODO Auto-generated constructor stub
}

public static void main(String[] args) {
    String path = Launcher.class.getResource("/1.png").getFile();
    File f = new File(path);
    JOptionPane.showMessageDialog(null,Boolean.toString(f.exists()));

}

}

如您所见,它只是输出是否可以找到文件。 在 Eclipse 下可以正常工作(返回 true)。我用图像 1.png 创建了一个源文件夹资源。 (资源文件夹添加到构建路径中的源)

只要我将项目导出到可运行的 jar 并启动它,它就会返回 false。 我不知道为什么。有人有想法吗? 提前致谢

编辑:我按照示例 2 创建资源文件夹:Eclipse exported Runnable JAR not showing images

【问题讨论】:

    标签: java image file


    【解决方案1】:

    如果您想从 .jar 文件中加载资源,请使用 getClass().getResource()。这将返回具有正确路径的 URL。

    Image icon = ImageIO.read(getClass().getResource("image´s path"));
    

    要访问 jar 中的图像,请使用 Class.getResource()

    我通常会这样做:

    InputStream stream = MyClass.class.getResourceAsStream("Icon.png");
    if(stream == null) {
       throw new RuntimeException("Icon.png not found.");
    }
    
    try {
       return ImageIO.read(stream);
    } catch (IOException e) {
       throw new RuntimeException(e);
    } finally {
       try {
          stream.close();
       } catch(IOException e) { }
    }
    

    您仍然了解,请通过此链接。

    Eclipse exported Runnable JAR not showing images

    【讨论】:

    • 谢谢,我应该将什么传递给“新文件”?为了让代码工作?
    【解决方案2】:

    因为图像不是单独的文件,而是打包在 .jar 中。

    使用代码从流中创建图像

    InputStream is=Launcher.class.getResourceAsStream("/1.png");
    Image img=ImageIO.read(is);
    

    【讨论】:

    • 我如何从输入流到文件?换句话说,我如何查看文件是否存在?
    • 流不为空
    • 是的,好吧,但我正在使用一个期望 PATH 到图像的函数。我想我无法通过输入流...
    • 你只是没有路径。如果您需要从流中创建文件,请将其存储在某处并使用新创建的文件将路径传递给您的函数。我宁愿重写函数以使用流而不是文件。
    • 这是一个库 sikuli,用于图像比较。我不会重写它。但是如果我执行“this.getClass().getResource("/image").getPath()”,我会得到正确的路径吗?我可以将它传递给方法,还是我错过了什么?
    【解决方案3】:

    尝试使用它来获取图像

    InputStream input = getClass().getResourceAsStream("/your image path in jar");
    

    【讨论】:

      【解决方案4】:

      两个简单的步骤:

      1 - 将文件夹(图像所在的位置)添加到构建路径;

      2 - 使用这个:

      InputStream url = this.getClass().getResourceAsStream("/load04.gif");
      myImageView.setImage(new Image(url));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-06
        • 2015-12-21
        • 2020-10-29
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 2016-01-24
        • 2014-05-13
        相关资源
        最近更新 更多