私は、eclipseとpydevを使用してJythonのスイングアプリを構築しました。私はすべてのボタンの背景に簡単なイメージを使用しました。 95%の時間で、すべてがすばらしく機能します。ただし、画面からコンテンツを追加または削除時間の約5%、これが発生します。Jython Swing:ランダムに発生するJava ImageIO IOException
Exception in thread "AWT-EventQueue-0" at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1310)
at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1579)
at javax.imageio.ImageIO.read(ImageIO.java:1438)
at javax.imageio.ImageIO.read(ImageIO.java:1342)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
javax.imageio.IIOException: javax.imageio.IIOException: Error reading PNG image data
をイライラすることは、それが容易に再現可能ではないということです、と私はPNGを描くアプリケーションのどこにでも発生する可能性があります。私は確かに例外をキャッチしてイメージを再インポートすることができますが、根本的な原因を突き止めることを望んでいます。
私はそうのようなリソースを呼び出す:
notPressed = ImageIO.read(pkg_resources.resource_stream('images', "button-blue.png")).getScaledInstance(width,height, Image.SCALE_SMOOTH)
私の唯一の推測では、時々pkg_resourcesは例外を発生させ、ファイルストリームをオープンに失敗するかもしれないということです。これを追跡する方法に関する提案や、私が静かに失敗させることができてうれしいか?
[イベントディスパッチスレッド](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)で 'ImageIO.read()'を呼び出していますか? – trashgod
正確 - この断続的なNPEは、並行性の問題について非常に不審な匂いがします。 ImageIO.read()をバックグラウンドスレッドで呼び出すのは問題ありません。画像が完成するまで、そしてSwingの呼び出し(ImageIconをJLabelに追加するなど)が完了するまで、画像を使用しない限りです。 EDT。 –
私は午前。それが問題だとすれば、もっと実用的な解決策は何ですか?アプリケーションの起動時にどこかにアクセス可能なすべてのイメージをスレッドキャッシュに保持するか、個々のイメージごとにスレッドを送信する。アプリケーション全体で約2〜3MBの画像を使用します。 – sarwar