2012-03-02 2 views
1

私のアプリケーションは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はまだ私が見つけた唯一のものですが、動作する可能性のある他の画像同じ方法。

ありがとうございます。

+2

私の推測では、あなたが、あなたのeditorPaneに画像を表示する、のHttpURLConnectionクラスを使用してコードに画像を読み取るほうが良いだろうということです。 –

+0

あなたの提案ギルバートありがとう、実際にローカルの保存されたファイルを使用して、を使用しても問題は解決されません。 –

+2

私は明確ではなかったと思う。イメージをJavaプログラムに読み込み、結果としてBufferedImageまたはImageを取得します。次に、editorPaneに表示するためにImageIconに変換します。 –

答えて

1

は、HttpURLConnectionのを使用してWebサイトから画像を取得します。

gifファイルとしてローカルドライブに画像を保存します。

あなたeditorPane.setText方法でこれを試してみてください:GIFファイルへのイメージソースポイントは、あなたが保存されて

<html> 
<body> 
<img src="images/picture.gif"> 
</body> 
</html> 

+0

私は試しました。しかし、この特定のイメージが私のデスクトップ上にあっても、それは役に立たなかった。 –

関連する問題