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

akb*_*ggs 2 java swing jar image

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

ImageIcon placeHolder = new ImageIcon("src\\Cards\\hidden.png");
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

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

And*_*yle 7

检查您正在调用的构造函数的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);
Run Code Online (Sandbox Code Playgroud)

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

  • 有一种更简单的方法可以使用getClass().getResource("image.png")加载图像.这将返回文件系统或jar的正确URL.这个URL可用于许多方面,包括新的ImageIcon(url) (3认同)