「Java Swing 非同期処理の結果をGUIに表示する」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
==Java Swing 非同期処理の結果をGUIに表示する== | ==Java Swing 非同期処理の結果をGUIに表示する== | ||
− | [[Java]]{{category 並行処理}} | + | [[Java]] | {{category 並行処理}} |
*イベントディスパッチスレッド | *イベントディスパッチスレッド | ||
===SwingWorkerを利用する=== | ===SwingWorkerを利用する=== |
2020年2月15日 (土) 08:36時点における版
Java Swing 非同期処理の結果をGUIに表示する
- イベントディスパッチスレッド
SwingWorkerを利用する
呼出例
- バッググラウンドで複数のログファイルを処理するシナリオ
File[] logs = chooser.getSelectedFiles(); LogAnalyzeWorker worker = new LogAnalyzeWorker(txtOut, logs); // txtOut : JTextArea worker.execute(); List<String> result = worker.get();
実行例
public static class LogAnalyzeWorker extends SwingWorker<List<String>, String> { private File[] logs; private JTextArea txtOut; public LogAnalyzeWorker(JTextArea txtOut, File[] logs) { this.logs = logs; this.txtOut = txtOut; // 結果表示先 } @Override protected List<String> doInBackground() throws Exception { List<String> result = new ArrayList<String>(); 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<String> chunks) { // publish() で設定した内容がリストで取得できるので、GUIに書き出す for (String logout : chunks) { txtOut.append(logout + "\n"); } } }
© 2006 矢木浩人