我有一個登錄框,我必須等待來自另一個線程。成功登錄框架後自行處置。我想彈出應用程序的主框架。現在我正在觀看布爾值以確定何時觸發主框架。這樣做的正確方法是什麼?看着一個布爾值只是不覺得優雅。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