Pregunta

Tengo un marco de inicio de sesión que tengo que esperar a que de otro hilo. Tras el éxito del marco de inicio de sesión se deshace en sí. Y quiero que aparezca el marco principal para la aplicación. En este momento estoy viendo un valor booleano para determinar cuándo el fuego de la estructura principal. ¿Cuál es la forma correcta de hacer esto? Ver a un valor booleano simplemente no se siente elegante.

¿Fue útil?

Solución

Si usted tiene Java 5 o posterior disponible, se puede utilizar un CountDownLatch . Por ejemplo, suponiendo que el bastidor principal está en control inicialmente, tiene la estructura principal crear el CountDownLatch con una cuenta atrás de 1 y pasar este pestillo para el bastidor de inicio de sesión. Entonces tener la espera de marco principal para el pestillo se convierta en 0:

CountDownLatch loginSignal = new CountDownLatch(1);
     ...    // Initialize login frame, giving it loginSignal 
     ...    // execute login frame in another Thread
// This await() will block until we are logged in:
loginSignal.await();

Haga que el marco de inicio de sesión, cuando se hace, disminuir el pestillo:

loginSignal.countDown();

Asegúrese de que no hay manera para que su marco de inicio de sesión para salir de donde se olvida de disminuir el pestillo! Tan pronto como el CountDownLatch llega a 0, el bastidor principal se vuelve ejecutable.

También es posible usar un Semaphore o Condition ( o cualquiera de algunas otras opciones de java.util.concurrent), pero para este propósito, una CountDownLatch parece más fácil de usar.

Otros consejos

Lo que realmente debe entender con el trato con Swing (y de hecho AWT), es que se necesita para mantener a toda la interacción con los componentes de la rosca AWT Evento de Despacho (EDT).

Por lo tanto, hacer el login de la EDT. Use un new Thread, o mejor un java.util.concurrent.ExecutorService. Cuando se descubre que se le ha conectado, utilice java.awt.EventQueue.invokeLater para volver a la EDT. Anónimo clase interna son grandes para la captura de contexto y, a pesar de su sintaxis tremendamente detallado, haciendo que el código más corto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top