从Eclipse运行Java应用程序时,我的ImageIcon正常显示。
但是在创建一个jar之后,图像的路径显然被搞砸了。
是否可以在运行时从jar中提取图像,以便随后将其打开?还是有更好的方法来做到这一点?
如果可能,我想分发一个jar文件。
要在同一jars中从图像文件创建ImageIcon,请加载代码:
1
| new javax.swing.ImageIcon(getClass().getResource("myimage.webp")) |
Class.getResource返回资源的URL(或null!)。 ImageIcon具有从URL加载的构造函数。
要在" classpath "上的jar中构造资源的URL,请参见java.net.JarURLConnection的文档。
您可以尝试以下操作:
1
| InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.webp"); |
在您的JAR文件中,您可能具有以下目录结构:
MyJAR.jar
- com (class files in here)
- images
----image.webp
这正在为我加载和设置内容窗格背景图像:
jar(或构建路径)包含:
1 2 3
| - com
- img
---- bg.png |
java包含:
1 2 3 4 5 6 7
| JFrame f = new JFrame("Testing load resource from jar");
try {
BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.webp"));
f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
e.printStackTrace();
} |
在jar和unjarred(这是技术术语)执行中经过测试并且可以工作。
BTW getClass().getClassLoader().getResourceAsStream("/img/bg.webp")-我首先尝试-向我返回了一个空InputStream。
在netbeans 8.1中,我要做的是在项目文件的src文件夹中包括图标文件夹和其他名为Resources的图像。因此,每当我构建Jar文件时,文件夹就包含在其中。文件树应如下所示:
-
src (Java files in source packges are here)
blockquote>
blockquote>
代码应类似于:
1
| jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.webp"))); |
在运行时从Jar文件中加载图像与从IDE中执行图像时(例如netbeans)加载图像相同,不同之处在于,从JAR文件加载图像时,路径必须正确且区分大小写(非常重要)。
这对我有用
1 2 3
| image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.webp"));
img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
lblhabitat1.setIcon(new ImageIcon(img)); |
如果" / Pictures / firstgame / habitat1.webp "中的p小写,则无法使用。检查空格,大小写和拼写