!!!Java Swing 非同期処理の結果をGUIに表示する [Java]{{category 並行処理}} *イベントディスパッチスレッド !!SwingWorkerを利用する *[SwingWorker|http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingWorker.html] !呼出例 *バッググラウンドで複数のログファイルを処理するシナリオ File[] logs = chooser.getSelectedFiles(); LogAnalyzeWorker worker = new LogAnalyzeWorker(txtOut, logs); // txtOut : JTextArea worker.execute(); List result = worker.get(); !実行例 public static class LogAnalyzeWorker extends SwingWorker, String> { private File[] logs; private JTextArea txtOut; public LogAnalyzeWorker(JTextArea txtOut, File[] logs) { this.logs = logs; this.txtOut = txtOut; // 結果表示先 } @Override protected List doInBackground() throws Exception { List result = new ArrayList(); for (File log : logs) { publish(log.getName()); // process() で取得できる処理状態の情報を返す result.add(log.getName()); // 時間がかかる処理本体 LogAnalyzer analyzer = new AccessLogAnalyzer(); analyzer.analyze(log); } // get() で取得できる結果を返す return result; } @Override protected void process(List chunks) { // publish() で設定した内容がリストで取得できるので、GUIに書き出す for (String logout : chunks) { txtOut.append(logout + "\n"); } } }