ファイルをロードしていると同時に、ファイルがロードされていることをユーザーに通知するウィンドウを表示しているプログラムがあります。ファイルのロードを実際に処理する SwingWorker である FileLoader クラスと、渡された SwingWorker のステータスをユーザーに通知する PropertyChangeListener を実装する ProgressWindow を作成することにしました。
私のコードは現在次のようになっています。
FileLoader loader = new FileLoader(filePath);
new ProgressWindow(loader, "Loading File", "Loading File");
//ProgressWindow's constructor calls loader.execute() inherited from SwingWorker
doc = loader.getFile();
問題は、競合状態になっていることです。ProgressWindow が構築され、loader.execute() が呼び出され、タスクが完了するまで実行されます。上記のコードが実行を続ける前にすべてが完了することを期待していましたが、代わりに、ローダーの execute メソッドが実行されている間も実行が続けられ、競合状態が発生します。
Java の同期に関するものを読んでみましたが、理解するのに苦労しています。私がやりたいことは、FileLoader の isDone() メソッドが true を返すまで待ってから、loader.getFile() 行に進むことだけです。それを行う簡単な方法はありますか?それとも、それが最善の方法ですか?