私のアプリケーションはJEditorPaneにRSSエントリを表示します。それほど悪くはありませんが、最近gifを表示しているときに重大な問題が発生しました。ここでは、小さなテストケースです:JEditorPane特定のアニメーション化されていないGIFを表示しながら、CPU使用率が高い
public class JEditorPaneTest
{
public static void main(String[] args)
{
JFrame dialog = new JFrame("JEditorPane test");
dialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = dialog.getContentPane();
c.setLayout(new BorderLayout());
JEditorPane editorPane = new JEditorPane();
editorPane.setEditorKit(new HTMLEditorKit());
editorPane.setText("<html><body><img src=\"http://feeds.feedburner.com/~ff/MacRumors-All?d=yIl2AUoC8zA\"></body></html>");
c.add(new JScrollPane(editorPane), BorderLayout.CENTER);
dialog.pack();
dialog.setVisible(true);
}
}
この問題はさらに深刻であるアニメーションGIFが点滅しているとCPU使用率が300%までである(クアッドコアコンピュータ)は、Mac OS XまたはWindows 7上の50%エディタペインを削除した後でも、CPU使用率は依然として高いからです。
プロファイリングを見ると、CPU使用率の50%がイベントディスパッチャスレッドにあり、残りの50%がsun.awt.image.ImageFetcher.run()にあるように見えます。
もう一つの興味深い事実は、JLabelの中にHTMLを埋め込むときにも起こるということです。
(EDIT:2012年3月9日)もう一つの興味深い事実は、ファイルを最初にローカルにダウンロードされている場合ということです(ファイルによって、アクセス:// ...)、あるいは、リソースをあることは何も解決しません。しかし、画像がJLabelのImageIconに表示されている場合、ちらつきやCPU使用率は高くなりません。どうやら、JEditorPaneでHTMLドキュメントを使用して、基本的なHTMLフォーマットをレンダリングする必要があります。
私はfeedburner.comからの画像の検閲を避けるための一般的な解決策を探していますが、feedburner.comのこれらのgifはまだ私が見つけた唯一のものですが、動作する可能性のある他の画像同じ方法。
ありがとうございます。
私の推測では、あなたが、あなたのeditorPaneに画像を表示する、のHttpURLConnectionクラスを使用してコードに画像を読み取るほうが良いだろうということです。 –
あなたの提案ギルバートありがとう、実際にローカルの保存されたファイルを使用して、を使用しても問題は解決されません。 –
私は明確ではなかったと思う。イメージをJavaプログラムに読み込み、結果としてBufferedImageまたはImageを取得します。次に、editorPaneに表示するためにImageIconに変換します。 –