バックグラウンドでファイルを読み取って処理するSwingWorkerがあります。その後、JTextPaneでさまざまなスタイルのデータをフォーマットして表示します。
ファイルが大きい場合(200Kを超える場合)、プログレスバー付きのダイアログを表示します。SwingWorkerのdone()メソッドで、JTextPaneにデータを入力してから、ダイアログを非表示にします。done()メソッドは次のようになります。
protected void done() {
populateTextPane();
hideProgressDialog();
System.out.println("After hideProgressDialog");
}
実行すると、ダイアログが消え、コンソールにprintlnメッセージが表示されますが、GUIがさらに10〜15秒間フリーズし、そのフリーズの最後にデータがJTextPaneに表示されます。
done()メソッドで起こったことはすべて、イベントディスパッチスレッドで行われると思いました。しかし、どうやらJVMは別のスレッドを生成してダイアログを非表示にし、JTextPaneにデータを入力している間にprintlnを実行しているようです。GUIがユーザー入力を再び受け入れる準備ができるまで進行状況ダイアログを表示したままにしたい...done()のすべてが本当に完了したことを検出するにはどうすればよいですか?