创建 Jar 后图像未加载

Images not loading after creating Jar

我写了一个简单的程序,我的图像在项目中加载得很好,但是一旦我将它导出到一个 jar 文件中,它们就会加载 none。我几乎没有创建工件或 jar 文件的经验。

项目结构:

项目:

    src: 
       myclass1, myclass2...

    res:
        image1.png image2.png...

我使用 Toolkit.getdefaultToolkit 加载图像

在我的 class 中,我通过编写在构造函数中加载图像 myImage = toolkit.getImage("res/image1.png"); 这在项目中工作得很好。在罐子里不起作用

我也试过了 myImage = toolKit.getImage("image1.png"); 这在项目中或打开 jar 时不起作用

我知道工具包不是加载图像的最佳方式,但我想知道如何在使用工具包时解决此问题。

我什至尝试使用我桌面上文件夹的绝对路径,它们再次在我的项目中正常加载,但在打开 jar 时它们没有加载。请帮助我尝试了一切。谢谢

(顺便说一句) 如果我在 intellij 中打开 jar 文件,图像会加载,但如果我在 finder 中或从我的桌面打开 jar 文件,它们不会。我希望能够将完成的项目发送给某人

toolkit.createImage(String) 方法接收一个字符串,并将其解释为路径,在该路径中查找 文件 。 jar 文件中的条目本身不是文件。因此,不可能使用此方法读取 jar 中的图像文件。

但是,这不是唯一的 createImage 方法。还有toolkit.createImage(URL),这就是你想要的。

SomeClass.class.getResource("something.png")

此表达式适用于任何 class(Foo.class 为您提供 Foo 的 class 实例,并且所有 class 实例都具有 getResource 方法) , 并将在 SomeClass.class (文件)所在的完全相同的位置查找命名条目。如果 SomeClass.class 当前存在于 jar 文件中,那么它将查找该文件。

因此,请确保 img.png 与您的 class 文件位于同一位置(确保它与其他文件一起压缩),这样就可以了。您也可以要求例如SomeClass.class.getResource("/foo/bar/img.png");然后将从 SomeClass 所在的 'root' 中查找。所以如果你有一个罐子,如果你 运行 jar tvf thatjar.jar 并且你得到:

....
/com/foo/yourpackage/SomeClass.class
....
/foo/bar/img.png

然后 /foo/bar/img.png 有效。

因此:一旦您知道将这些内容放入 jar 文件中的位置:

toolkit.createImage(YourClass.class.getResource("image1.png"))

就是您要找的。