Если у вас есть Java 5 или более поздняя версия, вы можете использовать CountDownLatch . Например, предполагая, что основной кадр изначально находится под контролем, создайте для главного кадра CountDownLatch
с обратным отсчетом 1 и передайте эту защелку кадру входа в систему. Затем заставьте основной кадр подождать, пока защелка не станет равной 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();
Имейте фрейм входа, когда закончите, уменьшите Latch:
loginSignal.countDown();
Убедитесь, что у вашего фрейма входа нет возможности выйти, где он забудет уменьшить защелку! Как только CountDownLatch
достигнет 0, основной кадр станет пригодным для работы.
Вы также можете использовать Semaphore
или Condition
(или любой из нескольких других вариантов из java.util.concurrent
), но для этой цели CountDownLatch
кажется проще в использовании.