Java Swing:显示 Jar 中的图像

Posted

技术标签:

【中文标题】Java Swing:显示 Jar 中的图像【英文标题】:Java Swing: Displaying images from within a Jar 【发布时间】:2010-09-07 01:32:36 【问题描述】:

从 Eclipse 运行 Java 应用程序时,我的 ImageIcon 显示得很好。

但是在创建一个 jar 之后,图像的路径显然被搞砸了。

有没有办法在运行时从 jar 中提取图像,然后我可以打开它?或者,有没有更好的方法来做到这一点?

如果可能,我想分发一个 jar 文件。

【问题讨论】:

“Tom Hawtin - tackline”的答案要好得多,只是出现的有点晚。请考虑更改您选择的答案。 【参考方案1】:

要从加载代码的相同 jar 中的图像文件创建 ImageIcon

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource 返回资源的 URL(或 null!)。 ImageIcon 有一个从 URL 加载的构造函数。

要为不在“类路径”上的 jar 中的资源构建 URL,请参阅java.net.JarURLConnection 的文档。

【讨论】:

这个答案没有说明将图像文件放在 jar 中的哪个位置,这是棘手的部分。【参考方案2】:

你可以试试这样的:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

在您的 JAR 文件中,您的目录结构可能为:

MyJAR.jar - com(此处的类文件) - 图片 ----图片.jpg

【讨论】:

【参考方案3】:

这对我来说可以加载和设置内容窗格背景图像:

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。

【讨论】:

getResourceAsStream 返回 NPE 是否与 java 版本有关?我还通过 getResourceAsStream 获得了 NPE,但 getResource 工作得很好。【参考方案4】:

在 netbeans 8.1 中,我所做的是在项目文件的 src 文件夹中包含名为 Resources 的图标和其他图像文件夹。因此,每当我构建 Jar 文件时,该文件夹都会包含在那里。文件树应该是这样的:

src(源包中的Java文件在这里)

** 您在项目中指定的包**

file.java

资源

图片.jpg

代码应该是这样的:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

【讨论】:

【参考方案5】:

在运行时从 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 是小写的,它将无法工作。检查空格、大小写和拼写

【讨论】:

另一个可能的原因可能是图像的扩展。我注意到 getClass().getResource("/Pictures/firstgame/habitat1.jpg") 将在 IDE 中很好地显示和加载,即使您将图像保存为“habitat1.JPG”但不会从 jar 文件加载。您必须将小写的扩展名保存为“habitat1.jpg”

以上是关于Java Swing:显示 Jar 中的图像的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing,尝试用图像图标复选框替换 JTable 中的布尔复选框

从 jar 中加载图像以用于 Swing HTML

java游戏开发之JRadioButton

Java:Swing 中的 HTML/CSS,内联显示不起作用

使用 java.awt 和 java.swing 获取要在框架上显示的 file.png 图像

如何在Swing中嵌入浏览器