创建应用程序的jar时,应用程序中的图像将不再显示。我们加载图像的代码示例如下:
ImageIcon placeHolder = new ImageIcon("src\\Cards\\hidden.png");
我们不知道为什么会这样。如果我们不将应用程序压缩到jar中,它将按预期运行;作为一个jar,图像就消失了。我们还尝试使用url而不是imageicons,但这只会导致程序根本无法运行。有什么想法吗?编辑:我们将图像文件以正确的路径放入jar文件,所以这不是问题所在。
nwsw7zdq1#
问题:文件夹 src jar里有吗?提示:您可以用任何支持zip的解包程序打开.jar以查看其内容。答:引用资源的方式不正确,您应该执行以下操作 getClass().getClassLoader().getResource("Cards/hidden.png") 相反。
src
getClass().getClassLoader().getResource("Cards/hidden.png")
7cwmlq892#
您应该从类路径加载资源,如下所示:
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("Cards/hidden.png")
当然,这假设在创建jar时,实际上是将图像文件放入其中。还有一种方法可以将资源作为url获取。
nwlqm0z13#
检查您正在调用的构造函数的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);
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);
当然,需要更多的例外和边缘案件处理,但这就是要点。
3条答案
按热度按时间nwsw7zdq1#
问题:文件夹
src
jar里有吗?提示:您可以用任何支持zip的解包程序打开.jar以查看其内容。
答:引用资源的方式不正确,您应该执行以下操作
getClass().getClassLoader().getResource("Cards/hidden.png")
相反。7cwmlq892#
您应该从类路径加载资源,如下所示:
当然,这假设在创建jar时,实际上是将图像文件放入其中。
还有一种方法可以将资源作为url获取。
nwlqm0z13#
检查您正在调用的构造函数的api。您传入的字符串是一个文件路径—当资源打包在jar中时,文件系统中没有包含映像的文件,因此您不能再使用此构造函数。
相反,您需要使用类加载器从流中加载资源,并将它们拉入字节数组:
当然,需要更多的例外和边缘案件处理,但这就是要点。