ファイルをロードすると同時に、ファイルがロードされていることをユーザーに通知するウィンドウを表示するプログラムがあります。実際にファイルの読み込みを処理する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.get(); //GUI Freezes when called
問題は、loader.get()を呼び出すと、GUIがフリーズするため、進行状況ウィンドウの進行状況バーが実行されず、すべてが無意味になることです。私の知る限り、これはGUIを制御するスレッドがloader.get()を呼び出すスレッドと同じであり、loader.execute()の実行中に保留になるためです。
これまで、loader.get()コマンドまたはloader.execute()メソッドのいずれかに対して新しいスレッドを作成し、そのスレッドでSwingUtilities.invokeLater()を呼び出しようとしましたが、プログラム全体がフリーズします。
SwingWorker.isDone()の場合にChangeListenerを作成してから、loader.get()を実行することを検討しましたが、これには、コードのやり直しが必要になります。
誰かがこれを機能させるための最良の方法を教えてもらえますか?