これは些細なことかもしれませんが、SwingWorkerに関する簡単なドキュメントを理解するのに苦労しています。
コピペした内容はこちら
ワークフロー
SwingWorker のライフサイクルには、次の 3 つのスレッドが関係しています。
現在のスレッド: このスレッドで execute() メソッドが呼び出されます。ワーカースレッドでの実行のために SwingWorker をスケジュールし、すぐに戻ります。get メソッドを使用して SwingWorker が完了するのを待つことができます。
ワーカー スレッド: doInBackground() メソッドがこのスレッドで呼び出されます。これは、すべてのバックグラウンド アクティビティが発生する場所です。バインドされたプロパティの変更について PropertyChangeListeners に通知するには、firePropertyChange および getPropertyChangeSupport() メソッドを使用します。デフォルトでは、state と progress の 2 つのバインドされたプロパティを使用できます。
イベント ディスパッチ スレッド: Swing 関連のすべてのアクティビティは、このスレッドで発生します。SwingWorker は process メソッドと done() メソッドを呼び出し、このスレッドのすべての PropertyChangeListeners に通知します。
多くの場合、現在のスレッドはイベント ディスパッチ スレッドです。
--
ワーカー スレッドは EDT ではないため、doInBackground() のコードは GUI 要素にアクセスしてはなりません。私の理解は正しいですか?
背景: SwingWorker を使用する小さなコードがありますが、doInBackground() で FileChooser を作成し、setCurrentDirectory()
. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6637181 (11-クローズド、欠陥ではありません)とほぼ同じ例外が発生していると思われます 。