1

我有一个 java web start 应用程序,它显示了一些加载的 png 图像:

InputStream is = AClass.class.getClassLoader().getResourceAsStream(“icon/tray.png”); 
ImageIO.read(is);

虽然这在 Eclipse 中完美运行,但当我使用 Java web start 运行应用程序时它不起作用。显然,两种设置的不同之处在于,在 Java web start 中,图像将从 jar 文件中加载,而在 Eclipse 中,图像直接来自文件系统。

Java web start 中发生的情况是,InputStream 按预期创建(意味着可以加载资源),但据我所知,在 ImageIO.read() 方法中找不到适合图像的阅读器在流中并且 ImageIO.read() 返回 null。从 Eclipse 启动时怎么能找到阅读器,而从 Java web start 启动时却找不到?

此外,我通过 css 更精确地从 JavaFX 加载了一些更多的 png,例如

-fx-image: url('icon/settings_general_32x32.png');

我在这里也看到了同样的行为。它适用于 Eclipse,但不适用于 Java web start,虽然我不确定这是出于相同的原因还是出于其他原因,但我猜这也是因为缺少阅读器。

所以我查看了 PNGImageReaderSpi 的代码,在 canDecodeInput() 方法中可以看到,将分析流的前 8 个字节以确定 PNG 阅读器是否可以解码图像。因此,我查看了从 Eclipse 启动和从 Java Web 启动时图像流的前 8 个字节,确实存在差异。从 Eclipse 运行时,第一个字节为 -119,80,78,71,13,10,26,10,在 Java web start 中,第一个字节为 -17,-65,-67,80,78,71,13, 10. 对我来说,这看起来至少有点奇怪,但我不确定这是否是问题的原因。

有人遇到过这个问题吗?我错过了什么吗?非常感谢任何帮助或想法。

4

1 回答 1

1

正如评论中所写的那样,应用程序构建脚本破坏了图像。这就是为什么它不能与 Java web start 一起工作,而是在没有使用构建脚本的 Eclipse 上工作的原因。

于 2013-08-08T14:41:11.430 回答