【问题标题】:Using an image in a JAR file在 JAR 文件中使用图像
【发布时间】:2013-02-12 22:18:25
【问题描述】:

我似乎无法做到这一点......

我在 Eclipse 中有一个名为 MyProject 的 Java 项目。在其根目录中是文件夹 bin、src 和资源。在资源内部,我有一个名为 myImage.gif 的图像。

在我的代码中,我想使用这个图像,并且无论它是否从 Jar 文件运行,我都希望它能够工作。我目前正在这样做

ImageIcon j = new ImageIcon(getClass().getResource("/resources/myImage.gif"));

但是当我通过 Eclipse(而不是作为 Jar)运行它时,它会吐出一个 null。

这样做的正确方法是什么?

【问题讨论】:

  • "/resources/myImage.gif" 是绝对路径 try "resources/myImage.gif"
  • 不幸的是同样的问题
  • 打印当前路径并通过 'resources/myImage.gif' 扩展它 检查这是否是您的图像的路径。
  • InputStream 流 = yourClass.class.getResourceAsStream('/resources/myImage.gif');`
  • 是的,它是图像的路径。

标签: java jar embedded-resource


【解决方案1】:

如果您要告诉 Eclipse 将 resources 视为源文件夹,那么您应该可以说

ImageIcon j = new ImageIcon(getClass().getResource("/myImage.gif"));

当您开始构建 JAR 时,您必须确保 resources 目录的内容进入 JAR 文件的顶层,以便在 JAR 案例中使用相同的路径,即

META-INF
  MANIFEST.MF
com
  example
    MyClass.class
myImage.gif

或者,也可能是更常见的 Java 习惯用法,将图像文件与 .java 文件(在本例中为 src/com/example)放在同一目录中,然后使用不带前导斜杠的 getResource

new ImageIcon(getClass().getResource("myImage.gif"));

Class.getResource 会针对相关类的包解析类似的相对路径。同样,在构建 JAR 时,您需要在 JAR 中具有相同的结构,这次是在 com/example 下使用 myImage.gif

【讨论】:

    【解决方案2】:

    将资源放入 src,Eclipse 会将其复制到 bin 中。

    ImageIcon ii =
       new ImageIcon(
          ImageIO.read(
             getClass().getClassLoader().getResourceAsStream(
                "resources/myImage.gif" )));
    

    路径前没有 /。

    【讨论】:

    • 不,同样的事情....我如何让 eclipse 刷新整个东西以便它清理和构建以便资源将在 bin 中?
    • 即使我手动将它放入垃圾箱,不幸的是这仍然不起作用。同样的问题,NullPointer...
    • 不,这不起作用。我正在从 ECLIPSE 运行,而不是从 Jar 文件中运行。我需要一个适用于 JAR 和 FROM ECLIPSE 的解决方案。
    • 我现在从 Eclipse 测试它!
    • @CodeGuy 根据my answer,正确的路径取决于您放置文件的确切位置。如果您将文件放在src/resources/myImage.gif 等处,则使用classLoader.getResourceAsStream("resources/myImage.gif") 会起作用-如果myImage.gif 直接在src 内,那么您只需要"myImage.gif" 而没有resources/
    猜你喜欢
    • 1970-01-01
    • 2014-07-16
    • 2010-12-12
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多