我有一个使用系统托盘图标的相对基本的 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
which 将 a 返回URL
到嵌入式资源。
new ImageIcon(getClass().getResource("../images/logo.png"));
会更好地工作。但总的来说,建议使用资源的绝对路径,new ImageIcon(getClass().getResource("/images/logo.png"));
因为它通常更难破解(恕我直言)
图像的路径是相对于应用程序的执行点的。
在开发中,您可能不得不向上移动一个目录(src
大概是从文件夹中移出)才能找到图像资源。这意味着您需要将 Jar 文件存储在一个文件夹中,该文件夹需要它升级一个级别才能找到图像资源。
如果可以的话,通常最好在可能的情况下将资源嵌入到 Jar 中。它使部署变得更容易,因为您减少了需要打包的文件数量,并使用户更难(有点)弄乱它;)