创建 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"))
就是您要找的。
我写了一个简单的程序,我的图像在项目中加载得很好,但是一旦我将它导出到一个 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"))
就是您要找的。