题
我有一个登录帧,我必须等待从另一个线程。成功登录后架部署本身。我想弹出应用程序的主框架。现在我看一个布尔值,以确定何时火起来的主框架。什么是这样做的正确方法是什么?看着一个布尔值,只是感觉优雅。
解决方案
如果您有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();
有无登录帧,在完成时,递减锁存:
loginSignal.countDown();
确保有没有办法让你的登入画面,退出它忘记递减锁!一旦CountDownLatch
达到0时,主框架变为可运行的。
您也可以使用 Semaphore
一>或 Condition
(或任何的来自java.util.concurrent
几个其他的选择),但对于这个目的,CountDownLatch
似乎更容易使用。
其他提示
你真的必须处理与Swing明白什么(事实上AWT),是你需要保持与AWT事件指派线程(EDT)的组件的所有交互。
因此,执行登录关EDT。使用new Thread
,或更好的java.util.concurrent.ExecutorService
。当你发现你已经登录,使用java.awt.EventQueue.invokeLater
找回到EDT。匿名内部类是巨大的用于捕获和上下文,尽管他们窘况详细的语法,使得代码短。
不隶属于 StackOverflow