Una pregunta tonta, pero realmente no puedo hacer que esto funcione: Tengo un proceso largo 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, presionando un botón mientras el proceso está en marcha.Diálogo modal de bloqueo sin bloqueo Swing progress
Si realizo el proceso en el EDT, esto obviamente evita que el usuario final haga algo mientras el proceso está en curso. Pero debido a que el EDT está ocupado procesando, nunca pasa a renderizar el contenido del diálogo, así que solo obtengo el contorno 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 para manipular el estado que el trabajador también está manipulando al mismo tiempo, con cosas malas como consecuencia. Si hago el diálogo modal, eso no ocurre, pero modal en Swing también implica bloqueando, por lo que en el momento que llamo a setVisible(true)
, el hilo bloquea para siempre.
Así que mi "solución" actual es usar un hilo de trabajo, y luego engendrar un hilo separado cuyo único propósito es absorber la naturaleza de bloqueo de setVisible
. ¡Seguramente debe haber una mejor solución!
Entonces, ¿cómo obtengo un 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?
Consulte también: http://stackoverflow.com/questions/3954120/swing-modal-dialog-refuses-to-close-sometimes – Zarkonnen