「Java Swing 非同期処理の結果をGUIに表示する」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==Java Swing 非同期処理の結果をGUIに表示する== [Java]{{category 並行処理}} *イベントディスパッチスレッド ===SwingWorkerを利用する=…」) |
|||
(同じ利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
− | ==Java Swing 非同期処理の結果をGUIに表示する== | + | ==[[Java Swing 非同期処理の結果をGUIに表示する]]== |
− | [Java] | + | [[Java]] | [[Category:並行処理]] |
− | *イベントディスパッチスレッド | + | *[[イベントディスパッチスレッド]] |
− | === | + | ===[[Swing]]Workerを利用する=== |
*[http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingWorker.html SwingWorker] | *[http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingWorker.html SwingWorker] | ||
====呼出例==== | ====呼出例==== | ||
9行目: | 9行目: | ||
LogAnalyzeWorker worker = new LogAnalyzeWorker(txtOut, logs); // txtOut : JTextArea | LogAnalyzeWorker worker = new LogAnalyzeWorker(txtOut, logs); // txtOut : JTextArea | ||
worker.execute(); | worker.execute(); | ||
− | List | + | List<String> result = worker.get(); |
====実行例 ==== | ====実行例 ==== | ||
− | public static class LogAnalyzeWorker extends | + | public static class LogAnalyzeWorker extends [[Swing]]Worker<List<String>, String> { |
private File[] logs; | private File[] logs; | ||
private JTextArea txtOut; | private JTextArea txtOut; | ||
21行目: | 21行目: | ||
@Override | @Override | ||
− | protected List | + | protected List<String> doInBackground() throws Exception { |
− | List | + | List<String> result = new ArrayList<String>(); |
for (File log : logs) { | for (File log : logs) { | ||
publish(log.getName()); // process() で取得できる処理状態の情報を返す | publish(log.getName()); // process() で取得できる処理状態の情報を返す | ||
28行目: | 28行目: | ||
// 時間がかかる処理本体 | // 時間がかかる処理本体 | ||
− | LogAnalyzer analyzer = new | + | LogAnalyzer analyzer = new [[Access]]LogAnalyzer(); |
analyzer.analyze(log); | analyzer.analyze(log); | ||
} | } | ||
36行目: | 36行目: | ||
@Override | @Override | ||
− | protected void process(List | + | protected void process(List<String> chunks) { |
// publish() で設定した内容がリストで取得できるので、GUIに書き出す | // publish() で設定した内容がリストで取得できるので、GUIに書き出す | ||
for (String logout : chunks) { | for (String logout : chunks) { |
2020年2月16日 (日) 04:27時点における最新版
Java Swing 非同期処理の結果をGUIに表示する
Java |
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 矢木浩人