我有一个登录帧,我必须等待从另一个线程。成功登录后架部署本身。我想弹出应用程序的主框架。现在我看一个布尔值,以确定何时火起来的主框架。什么是这样做的正确方法是什么?看着一个布尔值,只是感觉优雅。

有帮助吗?

解决方案

如果您有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。匿名内部类是巨大的用于捕获和上下文,尽管他们窘况详细的语法,使得代码短。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top