gpt4 book ai didi

java - 在另一台机器上的 JAR 文件中显示 jLabel 图标时出现问题

转载 作者:行者123 更新时间:2023-12-01 19:01:31 24 4
gpt4 key购买 nike

我正在构建一个普通的 Java 项目,我需要将其部署为 Windows 上的 JAR 应用程序。这种类型的应用程序是独立软件,它从我在构建此应用程序时使用的计算机中加载所有内容。它包含一个我确实需要使其可见的 Logo 。它在我的机器上完美运行,因为它总是在我的电脑上找到包含此 Logo 的目录,但我需要一种方法来使此 Logo 内置在我的应用程序中,或者即使我与以下人员共享此文件夹也可以从项目文件夹加载它其他机器来运行我的应用程序。因此,我想让这个 Logo 对于运行我的应用程序的每台计算机都可见,无论该文件夹位于其他计算机中的位置。我正在使用 Netbeans 1.8

提前致谢:)

enter image description here

最佳答案

Logo ...您的意思是窗口右上角的图标吗?我将使用一个从可执行 jar 内部执行此操作的示例。然而,这个概念与读取您想要打包在 jar 内的任何资源类似。

这里有两个关键概念,与当您不从 jar 内部运行时读取普通文件不同。事情的运作方式有所不同。

java.awt.Image frameImage = new javax.swing.ImageIcon(
getClass().getResource("/LotsaIcon.jpg")
).getImage();

请注意我们如何将此资源作为流加载(如果它的位置位于 jar 文件内部),而不是提供文件路径。

此处需要相对路径,相对于 jar 中文件的位置(相对于执行 java 'main' 的根目录)。这意味着,对于与执行 java 位于同一目录中的文件,文件名前面需要有斜杠。很重要。在 jar 之外,你不需要它。在 jar 内,前面的斜杠需要在那里......在这里说,在这个相对目录中。相对路径,而不是绝对路径...相对于从 jar 内部运行 java 代码的位置。

第三件事是......你在使用maven吗?如果是这样,要在构建项目时将资源放入 jar 中,您需要在 POM 文件中告诉 Maven。

        <resources>
<resource>
<directory>src/my-resources</directory>
<includes>
<include>**/*.txt</include>
<include>**/*.jpg</include>
</includes>
</resource>
</resources>



</build>

... POM 中最后一个/build 之前的某个位置。

否则......它甚至不会进入你的 jar 。然后,将资源放入您在 POM 指令中看到的文件夹中。它位于您的项目 src/my-resources

当 Maven 在根级别生成可执行 jar 时,它会移动它,执行一些操作,并将其放入您的 jar 中的根目录中。这就是为什么我的文件的相对路径/。如果我将它放在 src/my-resources 目录下的一堆文件夹中...我必须在我的文件名前面加上该相对路径,以便程序知道在 src/my-resources 中查找的位置.. .更深。

不过我只使用root。

我希望这能让你继续前进。有时,对于某些事情, getResource 并不能解决问题,您需要改用 getResourceAsStream 。取决于你在做什么。

我希望这能为您提供一个起点。 jar 是与在磁盘上查看位置的绝对路径不同的环境。这是有方法论的。您不再需要关注文件系统;而是关注文件系统。你在 jar 里面寻找它,没有文件系统,或者 C:。你在鱼缸里。您也需要在鱼缸中找到您的资源,而不是在文件系统上。当你构建项目时,你必须确保你的文件也被放入鱼缸中......否则它根本就找不到。并且不要忘记代码中的相对路径......在常规文件系统上不需要的前面的斜杠。

祝你好运!

关于java - 在另一台机器上的 JAR 文件中显示 jLabel 图标时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59631590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com