0

私のコードでは、ユーザーがボタンを押すと、これが SwingWorker バックグラウンド スレッドを呼び出し、そこで基本的にリストをループし、それを他のデータと相互参照し、パスを通過するたびに JLabel で GUI を更新します。ループ。問題は、doInBackground() でこれを行う必要があることはわかっていますが、返すものがなく、ループがループするたびに JPanel を新しい JLabel で更新したいことです。どうすればいいですか?ありがとう!

4

2 に答える 2

6

ここに私が本当に気に入っている完全な例がありますSwing Worker Example

使用publish()してオーバーライドする必要がありますprocess()

例:

class Worker extends SwingWorker<Void, String> {

    @Override
    protected void doInBackground() throws Exception {
       //here you make heavy task this is running in another thread not in EDT
       //process after some time call publish() 


    }

    @Override
    protected void process(List<String> chunks) {
        //this is executed in the EDT
        //here you update your label
    }
}
于 2013-08-26T18:00:48.000 に答える
4

Swing Workerの使用に関する Swing チュートリアル、特に のセクションを読んでくださいTasks that Have Interim Results

publish()ループで必要に応じてメソッドを呼び出す必要があります。

于 2013-08-26T17:54:18.360 に答える