-
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()
-
-
方法详细信息
-
enter
boolean enter()
阻止当前线程的执行,并在事件分派线程上输入新的辅助事件循环。该方法可以由任何线程调用,包括事件调度线程。 该线程将被阻塞,直到调用
exit()
方法或终止该循环。 将在事件分派线程中创建一个新的二级循环,以便在任一情况下调度事件。此方法只能在每个对象一次启动一个新的事件循环。 如果此对象已经启动了辅助事件循环,并且当前仍在运行,则此方法返回
false
以指示在启动新事件循环时不成功。 否则,此方法将阻止调用线程,并且当新的事件循环终止时,此方法将返回true
。 此时,该对象可以再次用于启动另一个新的事件循环。- 结果
-
true
在二次循环终止后,如果二次循环由此呼叫启动,false
-
-