2

SwingWorker のドキュメントには次のように記載されています。
-doInBackground()ワーカー スレッドで実行
-process()イベント ディスパッチ スレッド (AWT EDT) で非同期的に実行。publish()ワーカー スレッドでの呼び出しに関して、その実行は予測できません
-完了done()後に AWT EDT で実行されますdoInBackground()

process()の最後の呼び出しが常に前に実行されることを示すものは何も表示されませんdone()(両方とも同じスレッドで実行されます)。

publish()fromに複数の呼び出しがdoInBackground()あります。パブリッシュされたオブジェクトがピックアップされprocess()、進行状況レポートで GUI を更新するために使用されます。ドキュメントの文字通りの解釈は、 がワーカー スレッドの後に実行されることが保証されているが、予測不可能であるとドキュメントに記載されているため、 がの最後の実行の前に EDT でスケジュールされる可能性があることを暗示している可能性があります。done()process()done()process()

私のすべてのテストはdone()、最後の後に実行されることを示していますpublish()(これは理にかなっていて、私が望んでいることです) が、SwingWorker がその動作を保証するように設計されているかどうかを確認するために、ドキュメントを見たり、コードを掘り下げたりした人はいますか?

4

1 に答える 1

1

答えはノーだ。以下にリンクされている DSquare の回答を参照してください。

publish()直接スケジュールするのではなく、後でブロックprocessのスケジュールを開始するタイマーを設定します。process()EDTDELAY

于 2013-01-04T19:52:10.523 に答える