图像无法在.jar文件中使用

时间:2009-11-02 17:48:12

标签: java image swing jar

创建应用程序的JAR时,不再显示应用程序中的图像。我们加载图片代码的一个例子是:

ImageIcon placeHolder = new ImageIcon("src\\Cards\\hidden.png");

我们不知道为什么会这样。如果我们不将它压缩到JAR,应用程序将按预期运行;作为JAR,图像就会消失。我们还尝试使用URL而不是ImageIcons,但这只会导致程序根本无法运行。

有什么想法吗?

编辑:我们将图像文件放入正确路径的JAR文件中,这不是问题。

3 个答案:

答案 0 :(得分:7)

检查您正在呼叫的constructor的API。传入的字符串是文件路径 - 当资源打包在JAR中时,文件系统上没有包含图像的文件,因此您不能再使用此构造函数。

相反,您需要使用类加载器从流中加载资源,并将它们拉入字节数组中:

byte[] buffer = new byte[IMAGE_MAX_SIZE];
InputStream imageStream = getClassLoader().getResourceAsStream("src\Cards\hidden.png");
imageStream.read(buffer, 0, IMAGE_MAX_SIZE);
ImageIcon placeHolder = new ImageIcon(buffer);

当然需要更多例外和边缘案件处理,但这是它的要点。

答案 1 :(得分:2)

您应该从类路径中加载资源:

 InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("Cards/hidden.png")

这当然假设在创建JAR时,实际上是将图像文件放入其中。

getting the resource as a URL还有一种方法。

答案 2 :(得分:1)

问题:广告文件夹中是否存在src文件夹?

提示:您可以使用支持ZIP的任何解包程序打开.jar以查看其内容。

回答:您引用资源的方式不正确,您应该执行类似getClass().getClassLoader().getResource("Cards/hidden.png")的操作。