images不能在.jar文件中工作

fdbelqdn  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(299)

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

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

我们不知道为什么会这样。如果我们不将应用程序压缩到jar中,它将按预期运行;作为一个jar,图像就消失了。我们还尝试使用url而不是imageicons,但这只会导致程序根本无法运行。
有什么想法吗?
编辑:我们将图像文件以正确的路径放入jar文件,所以这不是问题所在。

nwsw7zdq

nwsw7zdq1#

问题:文件夹 src jar里有吗?
提示:您可以用任何支持zip的解包程序打开.jar以查看其内容。
答:引用资源的方式不正确,您应该执行以下操作 getClass().getClassLoader().getResource("Cards/hidden.png") 相反。

7cwmlq89

7cwmlq892#

您应该从类路径加载资源,如下所示:

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

当然,这假设在创建jar时,实际上是将图像文件放入其中。
还有一种方法可以将资源作为url获取。

nwlqm0z1

nwlqm0z13#

检查您正在调用的构造函数的api。您传入的字符串是一个文件路径—当资源打包在jar中时,文件系统中没有包含映像的文件,因此您不能再使用此构造函数。
相反,您需要使用类加载器从流中加载资源,并将它们拉入字节数组:

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

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

相关问题