1

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

画像が JEditorPanes に非同期的にダウンロードされると思いますが、ハングしているこれらの画像ダウンロード スレッドを強制終了する機能はありますか?

それとも、より良い解決策がありますか?

ありがとう

PS SwingWorker を使用しています。問題は、一部の画像 URL が利用できない場合、すべての JEditorPanes が画像をダウンロードできないことです。実際にはハングしませんが、イメージをダウンロードできません。なんで?

PPS

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

    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();
      }
    });
4

2 に答える 2

2

例を使用してSwingWorkerを使用することを検討するか、Runnable#Thread から BackGround Task を開始する可能性があります (出力は invokeLater() にラップする必要があります)

于 2011-08-05T15:17:55.130 に答える
1

バックグラウンド スレッドが進むべき道であり (1+ 彼の回答)、SwingWorker がこれを行う 1 つの方法であるという mKorbel に同意します。複数のバックグラウンド スレッドを同時に実行する必要がある場合は、SwingWorker を使用するときに注意してください。最近、すべての SwingWorker が 1 つのスレッドしか使用しないというバグが発生したためです。その場合、Executor/Future の使用を検討してください。

于 2011-08-05T15:20:13.497 に答える