Предотвращение зависания графического интерфейса при вызове SwingWorker.get ()

У меня есть программа, в которую я загружаю файл, и в то же время я отображаю окно, информирующее пользователя о том, что файл загружается. Я решил создать класс FileLoader, который был SwingWorker, который фактически обрабатывал загрузку файла, и ProgressWindow, который реализует PropertyChangeListener, чтобы информировать пользователя о статусе SwingWorker, который был передан в него.

Мой код в настоящее время выглядит так:

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, является тем же потоком, который вызывает loader.get (), который удерживается, пока выполняется loader.execute ().

До сих пор я пытался создать новый поток для команды loader.get () или для метода loader.execute () и вызвать SwingUtilities.invokeLater () в потоке, но затем вся программа зависла.

Я рассмотрел вопрос о создании ChangeListener для SwingWorker.isDone () и последующем запуске loader.get (), но для этого потребовалась бы некоторая переделка моего кода, которую я бы предпочел не делать.

Кто-нибудь может сказать мне, как лучше всего заставить это работать?

Ответы на вопрос(3)

Ваш ответ на вопрос