SwingWorker
この問題はJava固有のものではなく、多くのGUIモデルに共通して起こる問題である。SwingWorkerはこれを解決する手段として、時間を要するタスクを別のバックグラウンドスレッドで処理するようにしている。これにより、この間のGUIの反応は維持されるようになる。
SwingWorkerが有効なのは、ユーザーの操作イベントに引き続いて、時間を要するタスクが実行されねばならない場合である(たとえば、JButtonを押下した後に巨大なXMLファイルをパース(構文解析)するなどの場合)。これを単純にコーディングすると、次のようになるが、
これは動作はするものの、loadXML()メソッドがメインのSwingスレッドと同じスレッド(イベントディスパッチスレッド)の中で呼び出されることになるため、このメソッドの処理に時間がかかるなら、その間GUIはフリーズしてしまうことになる。
ワーカーの実行は、SwingWorker.execute()メソッドを使って開始できる。