ImageIO在Java web start中没有合适的读取器

ImageIO在Java web start中没有合适的读取器,image,javafx,java-web-start,javax.imageio,Image,Javafx,Java Web Start,Javax.imageio,我有一个java web start应用程序,它显示一些加载了以下内容的png图像: InputStream is = AClass.class.getClassLoader().getResourceAsStream(“icon/tray.png”); ImageIO.read(is); 虽然这在Eclipse中非常有效,但当我使用JavaWebStart运行应用程序时,它就不起作用了。显然,这两种设置的区别在于,在JavaWebStart中,映像将从jar文件加载,而在Eclipse中,

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

InputStream is = AClass.class.getClassLoader().getResourceAsStream(“icon/tray.png”); 
ImageIO.read(is);
虽然这在Eclipse中非常有效,但当我使用JavaWebStart运行应用程序时,它就不起作用了。显然,这两种设置的区别在于,在JavaWebStart中,映像将从jar文件加载,而在Eclipse中,映像直接来自文件系统

Java web start中的情况是,InputStream按预期创建(意味着可以加载资源),但据我所知,在ImageIO.read()方法中,无法为流中的图像找到合适的读取器,ImageIO.read()返回null。当从Eclipse启动时,如何能找到一个读卡器,而如果是从JavaWebStart启动时,怎么会找不到呢

此外,我还获得了更多的png,它们通过css更精确地从JavaFX加载机制,例如

-fx-image: url('icon/settings_general_32x32.png');
我在这里也看到了同样的行为。它可以在Eclipse上工作,但不能在JavaWebStart上工作,尽管我不确定这是出于相同的原因还是其他原因,但我猜这也是因为缺少了阅读器

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


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

如评论中所述,应用程序构建脚本所引发的图像。这就是为什么它不使用javawebstart,而是在Eclipse上工作的原因,Eclipse没有使用构建脚本

如注释中所述,由应用程序构建脚本触发的图像。这就是为什么它不使用javawebstart,而是在Eclipse上工作的原因,Eclipse没有使用构建脚本

如果将应用程序构建为一个独立的jar(而不是webstart),并按照中的说明从命令行运行它,会发生什么情况?序列80、78、71、13、10都在这两个位置,因此webstart打包版本似乎在它前面加了一些字节(第一个字节替换为其他3个字节)。。也许您正在使用的一些工具将图像视为文本(非二进制),并将其作为WebStart/JAR打包的一部分进行修改?能否从JAR中提取图像,并查看它们是否正确显示?创建web start应用程序的项目的构建脚本已使用替换筛选器刷新图像,因此读取器无法打开图像。非常感谢哈拉尔德的提示。关于Sebastian如果您将应用程序构建为一个独立的jar(而不是webstart),并按照中的说明从命令行运行它会发生什么?序列80、78、71、13、10在这两个位置,因此webstart打包版本似乎在它前面加了一些字节(第一个字节替换为其他3个字节)。。也许您正在使用的一些工具将图像视为文本(非二进制),并将其作为WebStart/JAR打包的一部分进行修改?能否从JAR中提取图像,并查看它们是否正确显示?创建web start应用程序的项目的构建脚本已使用替换筛选器刷新图像,因此读取器无法打开图像。非常感谢哈拉尔德的提示。问候塞巴斯蒂安