模块  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()
    • 方法摘要

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      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