ロードされたいくつかのpng画像を表示するJava Web Startアプリケーションがあります:
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() は null を返します。Eclipse から開始するとリーダーが見つかるのに、Java Web Start で開始するとリーダーが見つからないというのはどうしてでしょうか?
さらに、JavaFX から css 経由でより正確にメカニズムをロードする png をいくつか取得しました。
-fx-image: url('icon/settings_general_32x32.png');
ここでも同じ動作が見られます。Eclipse からは動作しますが、Java Web Start では動作しませんが、これが同じ理由によるものなのか、別の理由によるものなのかはわかりませんが、リーダーが見つからないことも原因であると推測します。
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. 私にとって、これは少なくとも少し奇妙に見えますが、それが問題の原因であるかどうかはわかりません。
誰もこの問題に遭遇しましたか? 何か見逃しましたか?どんな助けやアイデアも大歓迎です。