我有一个java web start应用程序,它显示了一些加载的png图像:
InputStream is = AClass.class.getClassLoader().getResourceAsStream(“icon/tray.png”);
ImageIO.read(is);
虽然这完全可以从Eclipse中运行,但是当我使用Java web start运行应用程序时,它不起作用。显然,两种设置的不同之处在于,在Java Web启动中,图像将从jar文件加载,而在Eclipse中,图像直接来自文件系统。
Java web start中发生的事情是,InputStream按预期创建(意味着可以加载资源)但是,据我所知,在ImageIO.read()方法中,找不到合适的阅读器对于流中的图像,ImageIO.read()返回null。如何从Eclipse启动时找到读者,而不是从Java web start开始?
此外,我得到了更多png,它们更加精确地通过css加载了JavaFX的机制,例如。
-fx-image: url('icon/settings_general_32x32.png');
我也在这里看到同样的行为。它可以从Eclipse工作,但不能用Java web启动,虽然我不确定这是因为相同的原因,还是因为其他原因,但我猜这是因为缺少读者。
所以我查看了PNGImageReaderSpi的代码,可以在方法canDecodeInput()中看到,将分析流的前8个字节以确定PNG阅读器是否可以解码图像。所以当我从Eclipse开始以及从Java web start开始时,我看一下图像流的前8个字节,确实存在差异。从Eclipse运行时,第一个字节是-119,80,78,71,13,10,26,10,在Java web start中,第一个字节是-17,-65,-67,80,78,71,13, 10。对我来说,这看起来至少有点奇怪,但我不确定这是否是导致问题的原因。
有人遇到过这个问题吗?我错过了什么吗?任何帮助或想法都受到高度赞赏。
答案 0 :(得分:1)
正如评论中所写的那样,应用程序构建脚本会破坏图像。这就是为什么它没有使用Java Web start,而是在Eclipse中使用未使用构建脚本的原因。