Diálogo de progreso de Swing modal sin bloqueo

Una pregunta tonta, pero realmente no puedo hacer que esto funcione: tengo un proceso de larga ejecución en una aplicación Swing que puede llevar varios minutos. Quiero mostrar un diálogo de progreso al usuario mientras este proceso está en curso. También quiero evitar que el usuario realice más acciones, por ejemplo, presionar un botón mientras el proceso continúa.

Si hago el proceso en el EDT, esto obviamente evita que el usuario final haga algo mientras el proceso continúa. Pero debido a que el EDT está ocupado procesando, nunca llega a representar el contenido del diálogo, así que solo obtengo el esquema del diálogo.

Pero si hago el proceso en un subproceso de trabajo, el usuario final puede hacer clic en los botones y hacer que el EDT manipule el estado que el trabajador también está manipulando al mismo tiempo, concosas malas Como consecuencia. Si hago que el diálogo sea modal, eso no sucede, peromodal en Swing también implicabloqueoasí que en el momento en que llamosetVisible(true), el hilo se bloquea para siempre.

Por lo tanto, mi "solución" actual es usar un hilo de trabajo y luego generar un hilo separado cuyo único propósito es absorber la naturaleza de bloqueo desetVisible. ¡Seguramente debe haber una mejor solución!

Entonces, ¿cómo obtengo un cuadro de diálogo que impide que el usuario interactúe con el resto del sistema (modal) pero no bloquea el hilo que hace que sea visible?

Respuestas a la pregunta(2)

Su respuesta a la pregunta