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

创建应用程序的JAR时,应用程序中的图像不再出现。 我们加载图片的代码示例如下:

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

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

有任何想法吗?

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

检查您正在调用的构造函数的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); 

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

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

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

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

还有一种将资源作为URL获取的方法。

问题 :文件夹src是否存在于jar中?

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

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