Module  java.desktop
软件包  java.awt

Interface SecondaryLoop



  • public interface SecondaryLoop
    一个辅助接口来运行嵌套事件循环。

    使用EventQueue.createSecondaryLoop()方法创建实现此接口的对象。 该接口提供两种方法, 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
    另请参见:
    Dialog.show()EventQueue.createSecondaryLoop()Toolkit.getSystemEventQueue()
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      boolean enter​()
      阻止当前线程的执行,并在事件分派线程上输入新的辅助事件循环。
      boolean exit​()
      取消阻止由 enter()方法阻止的线程的执行,并退出次级循环。
    • 方法详细信息

      • enter

        boolean enter​()
        阻止当前线程的执行,并在事件分派线程上输入新的辅助事件循环。

        该方法可以由任何线程调用,包括事件调度线程。 该线程将被阻塞,直到调用exit()方法或终止该循环。 将在事件分派线程中创建一个新的二级循环,以便在任一情况下调度事件。

        此方法只能在每个对象一次启动一个新的事件循环。 如果此对象已经启动了辅助事件循环,并且当前仍在运行,则此方法返回false以指示在启动新事件循环时不成功。 否则,此方法将阻止调用线程,并且当新的事件循环终止时,此方法将返回true 此时,该对象可以再次用于启动另一个新的事件循环。

        结果
        true在二次循环终止后,如果二次循环由此呼叫启动, false
      • exit

        boolean exit​()
        解除阻止由enter()方法阻塞的线程的执行,并退出次级循环。

        此方法将恢复调用enter()方法的线程,并退出在调用enter()方法时创建的辅助循环。

        请注意,如果在此循环运行时启动任何其他辅助循环,则在嵌套循环终止之前,阻塞的线程将不会恢复执行。

        如果二次回路尚未开始与enter()法,或这二次回路已与成品exit()方法,该方法返回false ,否则true返回。

        结果
        true如果此循环以前启动并且还没有完成 exit()方法,则 false否则