質問
私はログインのフレームにしているのを待ちから別のスレッド.に成功した際のログインフレームを破棄します。たいポップアップのメインフレーム表示します。私は今見boolean値かを判定するのに火をつけるのメインフレーム。何が正しいの?見boolean値だけを感じさせないエレガントです。
解決
まJava5以降のご利用で、あらか 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
がしやすいと思います。
他のヒント
あなたが本当にスイング(および実際にはAWT)を扱うと理解しなければならない何を、あなたはAWTイベントディスパッチスレッド(EDT)の成分とすべての相互作用を維持する必要があるということです。
だから、EDTオフのログインを行います。 new Thread
を使用するか、java.util.concurrent.ExecutorService
をより良くします。あなたはログインしていることを発見した場合、バックEDTの上に取得するjava.awt.EventQueue.invokeLater
を使用しています。匿名内部クラスのコンテキストを取得するための素晴らしいですと、その恐ろしく冗長な構文にもかかわらず、コードが短くなっています。