トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

Java Swing 非同期処理の結果をGUIに表示する



目次



記事一覧

キーワード

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");
        }
    }
}



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.