48

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

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

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

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

4

5 回答 5

37

ImageIcon要从相同 jar 中的图像文件创建一个,您的代码已加载:

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

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

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

于 2008-09-05T11:30:37.147 回答
24

您可以尝试以下方法:

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

在您的 JAR 文件中,您可能具有以下目录结构:

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

于 2008-08-27T20:18:29.307 回答
12

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

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。

于 2013-03-12T05:09:06.483 回答
4

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

  • src(源包中的Java文件在这里)
  • ** 您在项目中指定的包**

    • 文件.java
  • 资源

    • 图像.jpg

代码应该是这样的:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
于 2017-02-07T08:21:42.183 回答
0

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

于 2015-12-07T16:10:43.793 回答