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 中的布尔复选框
Java:Swing 中的 HTML/CSS,内联显示不起作用