Java Swing:在Jar中显示图像

Java Swing:在Jar中显示图像

Java Swing: Displaying images from within a Jar

从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)
  • ** PACKAGE YOU NAMED IN PROJECT**

    • file.java
  • 资源

    • image.webp


代码应类似于:

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小写,则无法使用。检查空格,大小写和拼写


推荐阅读