-
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
-
-