使用java中的ImageIcon类和JLabel创建.jar文件

时间:2018-02-10 19:30:19

标签: java jar jlabel imageicon

我在java中制作了一个Cluedo桌面游戏,当将它转换为.jar文件时,我无法显示我的图像。我将图像添加到另一个上面,所以我使用了JLabels(新的ImagIcon(“.. “))就像这样。要添加图像,现在创建.jar文件时无法看到图像。只是想知道如果没有编辑我的代码有很多方法可以做。我已经阅读了关于这个问题的所有stackoverflow答案,但没有一个解决了这个特殊问题。这是我在Eclipse中运行时的棋盘游戏。 enter image description here

当我将其转换为.jar文件时,它不再显示棋盘或任何播放器。

2 个答案:

答案 0 :(得分:1)

types.h期望ImageIcon(String)值为" file"引用驻留在磁盘上的图像。

如果您已将资源外部化,则需要确保所使用的路径正确无误。请记住,"工作目录"执行Jar的内容并不总是与Jar存储的目录相同。

为此,它通常建议"嵌入式" Jar本身内的图像(和其他资源)。这样,您可以简单地执行资源查找,无论其安装在何处。

每个IDE嵌入资源的方式略有不同,但它基本上要求图像包含在Jar和特定的位置/包中。

一个重要的注意事项,当嵌入到Jar中时,资源不再被引用,就像它们"文件",因为它们不是,它们是Jar / Zip存档的一部分,需要以不同的方式引用。

要加载嵌入式资源,您需要使用String,它会返回Class#getResourceURL,返回Class#getResourceAsStream

在大多数情况下,第一个就足够了。虽然InputStream确实需要ImageIcon,但通常建议您使用URL,请仔细阅读Reading/Loading images以获取更多详细信息。

这样做的好处有两个方面:

  1. 它会一直阻塞,直到读取图像,这意味着当方法返回时图像完全实现
  2. 当无法读取图片时会抛出ImageIO.read,这会更有意义,因为IOException无声地失败
  3. 所以,所有这些都会累积到类似的......

    ImageIcon

答案 1 :(得分:0)

我认为它来自你的图像的路径。源的图像路径可能与.jar

不同