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