Caixa de diálogo de progresso de balanço modal sem bloqueio

Uma pergunta idiota, mas realmente não consigo fazer isso funcionar: tenho algum processo de execução demorada em um aplicativo Swing que pode levar vários minutos. Quero exibir uma caixa de diálogo de progresso para o usuário enquanto esse processo estiver em andamento. Também quero impedir que o usuário execute outras ações, por exemplo, pressionando um botão enquanto o processo está em andamento.

Se eu fizer o processo no EDT, isso obviamente impede que o usuário final faça alguma coisa enquanto o processo está em andamento. Mas como o EDT está ocupado processando, ele nunca consegue renderizar o conteúdo da caixa de diálogo, então eu apenas entendo o contorno da caixa de diálogo.

Porém, se eu executar o processo em um encadeamento de trabalho, o usuário final poderá clicar nos botões e fazer com que o EDT manipule o estado que o trabalhador também está manipulando ao mesmo tempo, comcoisas ruins como consequência. Se eu tornar o diálogo modal, isso não acontece, masmodal no Swing também implicabloqueio, então no momento que eu ligosetVisible(true), o encadeamento bloqueia para sempre.

Portanto, minha "solução" atual é usar um thread de trabalho e gerar um thread separado cujo único objetivo é absorver a natureza de bloqueio desetVisible. Certamente deve haver uma solução melhor!

Então, como obtenho uma caixa de diálogo que impede o usuário de interagir com o resto do sistema (modal), mas não bloqueia o encadeamento que faz com que fique visível?

questionAnswers(2)

yourAnswerToTheQuestion