モジュール java.desktop
パッケージ java.awt

インタフェースSecondaryLoop


public interface SecondaryLoop
ネストされたイベント・ループを実行するためのヘルパー・インタフェース。

このインタフェースを実装するオブジェクトは、EventQueue.createSecondaryLoop()メソッドで作成されます。 このインタフェースは、イベント・ループの開始と停止に使用できる2つのメソッド、enter()およびexit()を提供します。

enter()メソッドが呼び出されると、exit()メソッドによってループが終了するまで、現在のスレッドはブロックされます。 また、新しいイベント・ループがイベント・ディスパッチ・スレッド上で開始されますが、それは現在のスレッドである場合もそうでない場合もあります。 どのスレッド上でも、ループはそのexit()メソッドを呼び出すことによって終了させることができます。 ループの終了後、SecondaryLoopオブジェクトを再利用して、ネストされた新しいイベント・ループを実行できます。

このインタフェースを適用する一般的な使用例は、AWTおよびSwingのモーダル・ダイアログです。 モーダル・ダイアログは、イベント・ディスパッチ・スレッド上で表示されると、新しいセカンダリ・イベント・ループに入ります。 その後、ダイアログが非表示にされるか破棄されると、ダイアログはループを終了し、スレッドは実行を続けます。

次の例は、セカンダリ・ループの単純な使用例を示しています。

   SecondaryLoop loop;

   JButton jButton = new JButton("Button");
   jButton.addActionListener(new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent e) {
           Toolkit tk = Toolkit.getDefaultToolkit();
           EventQueue eq = tk.getSystemEventQueue();
           loop = eq.createSecondaryLoop();

           // Spawn a new thread to do the work
           Thread worker = new WorkerThread();
           worker.start();

           // Enter the loop to block the current event
           // handler, but leave UI responsive
           if (!loop.enter()) {
               // Report an error
           }
       }
   });

   class WorkerThread extends Thread {
       @Override
       public void run() {
           // Perform calculations
           doSomethingUseful();

           // Exit the loop
           loop.exit();
       }
   }
 

導入されたバージョン:
1.7
関連項目: