私は別のスレッドから待たなければならないログインフレームを持っています。ログインに成功すると、フレーム自体が廃棄されます。そして、私はアプリケーションのメインフレームをポップアップしたい。今、メインフレームを起動するタイミングを決めるブール値を見ています。これを行う正しい方法は何ですか?ブール値を見るだけではエレガントではありません。JavaがJFrameの終了を待つ
答えて
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、正確に私が必要としたもの。 –
華麗!ありがとう! – Antonio
Swing(実際にはAWT)を扱う上で本当に理解しなければならないことは、AWT Event Dispatch Thread(EDT)のコンポーネントとのすべての対話を維持する必要があるということです。
したがって、EDTからログインしてください。 new Thread
、またはそれより良いjava.util.concurrent.ExecutorService
を使用してください。あなたがログインしたことを発見したら、java.awt.EventQueue.invokeLater
を使ってEDTに戻ります。匿名の内部クラスはコンテキストをキャプチャするのに最適です。また、非常に冗長な構文にもかかわらず、コードを短くします。
- 1. プロセスの終了終了を待つ
- 2. JavaFx WebViewがJavaメソッドの終了を待つ
- 3. Javaスレッドが終了するのを待つ
- 4. タイマーがJavaで終了するのを待つ
- 5. 子が終了するのを待つ
- 6. コルーチンが終了するのを待つ
- 7. スプリングブートテスト - 終了を待つ
- 8. Javaが終了するまでタイマーを待つ
- 9. Application.Calculateが終了するまで待つ
- 10. ウィンドウの終了イベントを待つ方法
- 11. jQueryはif文の終了を待つ
- 12. メソッドを終了する前にコールバックを待つ方法(Java)
- 13. スレッドを終了するスレッドを待つ
- 14. VBAシェルと終了コードを待つ
- 15. 終了したらスレッドを待つ(Android)
- 16. Javaマルチスレッドでスレッドが終了するのを待ちます
- 17. Observable SubscriptionをキャンセルしてObserverが終了するのを待つ
- 18. moongoseがクエリを終了するのを待つ方法は?
- 19. 外部のPIDが終了するのを待つ
- 20. バッチポーズすべてのキーが終了するのを待つ
- 21. 2つのスレッドが終了するのを待ちます。
- 22. 他のスレッドが終了するのを待つMFCメインスレッド
- 23. サブスクリプションのチェーンが終了するのを待つ方法は?
- 24. 他のビューでタスクが終了するのを待つ
- 25. Jtableが動作しておらず、Jframeが終了していない(JAVA)
- 26. JFrameにアクセス中にJVMが終了コード1で終了しました
- 27. アニメーターが終了するのを待つ方法は?
- 28. viewDidDisAppearでアニメーションが終了するのを待つ方法は?
- 29. 続行する前にサウンドが終了するのを待つ
- 30. 非同期メソッドが終了するのを待つ
あなたは何を待っているのか不明です。バックグラウンドスレッドでログインできますか?ログインが完了したら、SwingUtilities.invokeLater()を使用してログインフォームを閉じてメインフォームを表示しますか? –