![](/img/trans.png)
[英]Why does new File(path) doesn't work when I run my application from 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.