从 Eclipse 运行 Java 应用程序时,我的 ImageIcon 显示得很好。
但是在创建一个 jar 之后,图像的路径显然被搞砸了。
有没有办法在运行时从 jar 中提取图像,然后我可以打开它?或者,有没有更好的方法来做到这一点?
如果可能的话,我想分发一个 jar 文件。
从 Eclipse 运行 Java 应用程序时,我的 ImageIcon 显示得很好。
但是在创建一个 jar 之后,图像的路径显然被搞砸了。
有没有办法在运行时从 jar 中提取图像,然后我可以打开它?或者,有没有更好的方法来做到这一点?
如果可能的话,我想分发一个 jar 文件。
ImageIcon
要从相同 jar 中的图像文件创建一个,您的代码已加载:
new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))
Class.getResource
返回资源的 URL(或null
!)。ImageIcon
有一个从 URL 加载的构造函数。
要为不在“类路径”上的 jar 中的资源构建 URL,请参阅java.net.JarURLConnection
.
您可以尝试以下方法:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
在您的 JAR 文件中,您可能具有以下目录结构:
MyJAR.jar
- com(此处的类文件)
- 图像
----image.jpg
这对我来说可以加载和设置内容窗格背景图像:
jar(或构建路径)包含:
- com
- img
---- bg.png
java包含:
JFrame f = new JFrame("Testing load resource from jar");
try {
BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
e.printStackTrace();
}
在 jar 和 unjarred(这是技术术语)执行中测试和工作。
顺便说一句getClass().getClassLoader().getResourceAsStream("/img/bg.png")
- 我首先尝试过 - 给我返回了一个空 InputStream。
在 netbeans 8.1 中,我所做的是在项目文件的src文件夹中包含名为Resources的图标和其他图像的文件夹。因此,每当我构建Jar文件时,该文件夹都会包含在那里。文件树应该是这样的:
- src(源包中的Java文件在这里)
** 您在项目中指定的包**
- 文件.java
资源
- 图像.jpg
代码应该是这样的:
jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
在运行时从 Jar 文件加载图像与从 IDE(例如 netbeans)执行时加载图像相同,区别在于从 JAR 文件加载图像时,路径必须正确且区分大小写(非常重要)。这对我有用
image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg")); img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH); lblhabitat1.setIcon(new ImageIcon(img));
如果“/Pictures/firstgame/habitat1.jpg”中的 p 是小写的,它将无法工作。检查空格、大小写和拼写