2011-08-05 7 views
1

私は内部にJEditorPanesをほとんど含まない単純なSwingアプリケーションを作成しようとしています。各JEditorPaneには、内部にhtmlタグを含むテキストが含まれます。また、いくつかのペインには、タグ<img src='http://some.url' />でhtmlが含まれています。つまり、イメージがWebのどこかにある可能性があります。 問題は、画像URLの1つが利用できない場合、私のJEditorPaneとアプリケーション全体がハングすることです。(私は自分のスレッドでJEditorPanesを構築し、構築後SwingUtilities.invokeLater(...)を使用してメインフレームに入れています)私はイメージが非同期にJEditorPanesにダウンロードすることを信じてJEditorPaneの非同期イメージダウンロードに関する問題

、スレッドをダウンロードするこれらhunging画像を殺すためにどんな能力があるのでしょうか?

もっと良い解決策がありますか?

ありがとう

P.S. SwingWorkerが使用されています。問題は、 - いくつかの画像URLが利用できない場合、JEditorPaneはすべて画像をダウンロードできません。実際に彼らは掛かっていませんが、画像をダウンロードすることはできません。どうして?

P.P.S.

バックグラウンドスレッド:

JEditorPane jtp=new JEditorPane(); 
    jtp.setContentType("text/html"); 
    jtp.setPreferredSize(newDimension(20,250));      
    StringBuilder sb=new StringBuilder(); 
    sb.append("<img src='").append(url).append("'/>"); 
    jtp.setText(sb.toString()); 

    SwingUtilities.invokeLater(new Runnable(){ 
    @Override 
    public void run() {        
     myPanel.add(rigid,0);   
     myPanel.add(jtp,0); 

     myPanel.revalidate(); 
     } 
    }); 

答えて

2

exampleで、SwingWorkerを使用することを検討するか、Runnableを#スレッドから可能な開始バックグラウンドタスクがある(出力は(invokeLaterにラップする必要があります)

+0

ありがとうございました。しかし、私はそれらを使用します。問題は、 - いくつかの画像URLが利用できない場合、JEditorPaneはすべて画像をダウンロードできません。どうして? – stemm

+0

@stemm SWingWorkerはかなりキャンセル可能であるため、実際にはあなたのissee(e)を表示する実行可能コードを投稿する必要があります。コードの検証/テストURLは... – mKorbel

+0

私の質問を編集してください。 – stemm

1

I mKorbelと合意すると、バックグラウンドスレッドが(1 +の答えに)行く方法であり、SwingWorkerはこれを行う方法の1つです。複数のバックグラウンドスレッドを同時に実行する必要がある場合は、Swingしかし、最近では、すべてのSwingWorkersに1つのスレッドのみを使用させるバグがあったので、ワーカーです。その場合、Executors/Futuresを使用することを検討してください。

+0

ありがとうございます、私の質問に編集してください。 – stemm

+0

あなたはバックグラウンドスレッド内からスイングコールをしています。読んでください:[同時実行のスイング](http://download.oracle.com/javase/tutorial/uiswing/concurrency/) –