1

ロードされたいくつかの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. 私にとって、これは少なくとも少し奇妙に見えますが、それが問題の原因であるかどうかはわかりません。

誰もこの問題に遭遇しましたか? 何か見逃しましたか?どんな助けやアイデアも大歓迎です。

4

1 に答える 1

1

コメントに書かれているように、アプリケーションのビルドスクリプトによって画像が破壊されました。これが、Java Web Start では動作せず、ビルド スクリプトが使用されていない Eclipse から動作していた理由です。

于 2013-08-08T14:41:11.430 に答える