我有一个登录框,我必须等待来自另一个线程。成功登录框架后自行处置。我想弹出应用程序的主框架。现在我正在观看布尔值以确定何时触发主框架。这样做的正确方法是什么?看着一个布尔值只是不觉得优雅。Java等待JFrame完成
3
A
回答
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();
有登入画面,在完成时,递减锁存:
loginSignal.countDown();
确保有没有办法让您的登录帧退出忘记减少闩锁的地方!一旦CountDownLatch
达到0,主框架即可运行。
您也可以使用Semaphore
或Condition
(或java.util.concurrent
的几个其他选项中的任何一个),但为此目的,CountDownLatch
似乎更易于使用。
+1
+1,正是我所需要的。 – 2012-07-17 13:44:12
2
在处理Swing(实际上是AWT)时,你真正必须理解的是,你需要保持与AWT Event Dispatch Thread(EDT)的组件的所有交互。
因此,请从EDT登录。使用new Thread
或更好的java.util.concurrent.ExecutorService
。当您发现您已登录时,请使用java.awt.EventQueue.invokeLater
重新登录EDT。匿名内部类非常适合捕获上下文,尽管它们使用了非常冗长的语法,但使代码更短。
相关问题
- 1. Java等待runnable完成
- 2. Java等待线程完成
- 3. 等待完成
- 4. 等待完成
- 5. 等待webworker完成
- 6. 等待NSURLSessionTask完成
- 7. jquery,等待完成
- 8. 等待IDBCursor.onsuccess完成
- 9. 等待ExecWB完成
- 10. 等待GUI完成
- 11. WebRequest.GetResponse等待完成
- 12. 等待BackgroundWorker完成?
- 13. 等待webrequest完成
- 14. 等待AsyncTask完成
- 15. delayed_job等待完成
- 16. 等待UIView完成
- 17. 等待shutil.copyfile完成
- 18. 等待SwingWorker完成
- 19. 等待$ .post完成
- 20. 等待AFJSONRequestOperation完成
- 21. QNetworkReply等待完成
- 22. Java多线程等待线程完成
- 23. 等待下载完成在selenium webdriver JAVA
- 24. 等待Java中的线程完成
- 25. Java等待定时器直到完成
- 26. Java等待所有主题完成
- 27. 等待完成Java的过程
- 28. Java - HttpUrlConnection等待下载完成
- 29. Java:等待所有子进程完成
- 30. Java - 等待流完成写入?
不清楚你在等什么。你可以在后台线程中进行登录,然后登录完成后使用SwingUtilities.invokeLater()关闭登录表单并显示主窗体? – 2009-04-28 23:08:47