Evitando o congelamento da GUI ao chamar SwingWorker.get ()

Eu tenho um programa onde eu estou carregando um arquivo enquanto ao mesmo tempo eu estou exibindo uma janela para informar ao usuário que o arquivo está sendo carregado. Eu decidi fazer uma classe FileLoader que era um SwingWorker que realmente manipulava o carregamento do arquivo e um ProgressWindow que implementa PropertyChangeListener para informar ao usuário sobre o status do SwingWorker que foi passado para ele.

Meu código atualmente é assim:

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

O problema é que sempre que eu chamo loader.get (), ele congela a GUI, assim a barra de progresso na Janela de Progresso não é executada e a coisa toda é inútil. Tanto quanto eu posso dizer, isso é porque o thread controlando a GUI é o mesmo segmento que chama loader.get (), que fica em espera enquanto loader.execute () está em execução.

Até agora, tentei criar um novo thread para o comando loader.get () ou o método loader.execute () e chamar SwingUtilities.invokeLater () no thread, mas o programa inteiro congela.

Eu considerei a criação de um ChangeListener para quando SwingWorker.isDone () e, em seguida, executando loader.get (), mas isso exigiria alguns retrabalho do meu código que eu prefiro não fazer.

Alguém poderia me dizer qual é a melhor maneira de fazer isso funcionar?

questionAnswers(3)

yourAnswerToTheQuestion