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

Can I have my entire application in a single JAR file?

我不太明白 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,0,0,null);

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

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

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

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

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

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

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

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