繁体   English   中英

将Java文件编译为jar文件后,为什么图像路径不再起作用?

[英]Why does an image path no longer work once I compile my java files into a jar file?

我有一个使用系统任务栏图标的相对基本的Java程序。 我在编写代码时使用的路径如下"../images/logo.png" 但是,当我将其编译为jar文件时,该图像不会显示在系统托盘中。 相反,如果我将路径更改为"./images/logo.png" ,则该图像以jar文件形式出现在系统托盘中,而不是在测试时出现。

这不是主要问题。 但是,我很好奇为什么会出现这种不一致的情况。

将程序打包为.jar文件时,您的构建很可能会将映像复制到.jar文件所在的目录中。 但是,在ide中调试时,映像文件位于下面的一个目录中。

另一种可能性是,您只是在两种情况下将“直接工作”设置为不同。

顺便说一句,您可能有兴趣将图像嵌入到jar文件中,请参阅: https : //stackoverflow.com/a/1096491/24954

这个答案取决于两件事。 图像文件是否嵌入。

嵌入式资源

一旦对应用程序进行Jar'ed操作并且图像被嵌入应用程序内部,常规的文件访问方法将不再起作用。

尝试做类似...

new ImageIcon("../images/logo.png");

要么

new File("../images/logo.png");

不行 这是因为资源不再是文件系统上下文中的文件(实际上是Jar中的一个Zip条目)。

相反,您需要使用Class#getResource ,它将返回URL到嵌入式资源。

new ImageIcon(getClass().getResource("../images/logo.png"));

会更好地工作。 不过,一般而言,建议对资源使用绝对路径new ImageIcon(getClass().getResource("/images/logo.png")); 因为通常比较难破解(恕我直言)

外部资源

图像的路径相对于应用程序的执行点。

在开发中,您可能必须向上移动目录(可能是src文件夹中的目录)才能找到图像资源。 这意味着您将需要将Jar文件存储在一个文件夹中,这需要将它逐步升级才能找到图像资源。

如果可以的话,通常最好将资源嵌入Jar中。 当您减少需要打包的文件数时,它使部署变得更容易,并使用户更难以(有点)弄乱它;)

无法识别图像的路径,因此可以使用此代码

jLable1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Client/images/images/button_ok.png"))); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM