我可以将整个应用程序放在一个 JAR 文件中吗?

问题描述

我不太了解创建 Swing 应用程序的真正工作原理。 我创建了一个简单的应用程序,可以从路径中获取背景图像。

ImageIcon imageIcon = new ImageIcon("C:\\Java\\ApplicationName\\out\\Resourses\\backGround.jpg");
Image image = imageIcon.getimage(); // Создание картинки из него
Image temp = image.getScaledInstance(500,500,Image.SCALE_SMOOTH); 
imageIcon = new ImageIcon(temp);
g2d.drawImage(temp,null);

它有效,所以我决定制作一个独立于 Java 文件夹中的更改的 JAR 文件(例如删除此图像)并将图像放入 src-images(包)。我不知道是否有可能。

我开始得到这样的背景图像。

ImageIcon imageIcon = new  ImageIcon(this.getClass().getResource("/images/backGround.jpg")); 

该程序在 IntelliJ IDEA 中运行良好,但如果我将其解压缩到 JAR 文件,我会得到一个空白的背景屏幕。这是为什么?

我可以将整个应用程序包括在单个 JAR 文件中的图像吗?一个不依赖于其他文件夹的文件夹?

解决方法

您当然可以将图像和代码放在一个 jar 文件中。图像未加载是因为它不在 jar 文件中,或者因为它不在 jar 内的路径 /images/backGround.jpg 中。

关于 jar 文件的一件有用的事情,您可能不知道:它们是 .zip 格式,因此您可以使用任何 zip 工具查看 jar 中的内容(将 jar 文件临时重命名为 .zip 可能会使这更容易) .如果图像不存在,请修复您的 jar 构建(您没有说明您是如何制作它的,因此不确定您需要更改什么)。如果图像存在但位于不同的路径下,则修复 jar 构建以将其放在正确的位置,或更改您正在读取它的路径。

,

是的,您绝对可以将整个应用程序包含到单个 jar 文件中,即 Runnable jar 文件。但我建议您不要在 jar 文件中包含您的图像,而是将该图像路径传递给一个属性文件,并在您的图像路径代码中使用该属性文件。这样,即使下次您需要更改图像,您只需更改属性文件中的路径,而不必再次导出整个项目。