質問

私はログインのフレームにしているのを待ちから別のスレッド.に成功した際のログインフレームを破棄します。たいポップアップのメインフレーム表示します。私は今見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を使用しています。匿名内部クラスのコンテキストを取得するための素晴らしいですと、その恐ろしく冗長な構文にもかかわらず、コードが短くなっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top