Java等待JFrame完成

时间:2009-04-28 20:14:00

标签: java jframe

我有一个登录框架,我必须等待另一个线程。成功登录框架后自行处理。我想弹出应用程序的主框架。现在我正在观看一个布尔值来确定何时启动主框架。这样做的正确方法是什么?看一个布尔值只是感觉不太优雅。

2 个答案:

答案 0 :(得分:11)

如果您有Java 5或更高版本,则可以使用CountDownLatch。例如,假设主框架最初处于控制状态,请让主框架创建{倒计数为1的CountDownLatch并将此锁存器传递给登录框架。然后让主框架等待锁存器变为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,主框架就会变为可运行。

您还可以使用SemaphoreCondition(或java.util.concurrent中的任何其他选项),但为此,CountDownLatch似乎更容易使用

答案 1 :(得分:2)

处理Swing(实际上是AWT)时你真正必须理解的是,你需要保持与AWT事件调度线程(EDT)组件的所有交互。

所以,请从EDT登录。使用new Thread或更好的java.util.concurrent.ExecutorService。当您发现自己已登录时,请使用java.awt.EventQueue.invokeLater返回EDT。匿名内部类非常适合捕获上下文,尽管它们的语法非常冗长,但代码更短。