Application.DoEvents() - > java中的等价函数?

时间:2010-07-22 14:38:25

标签: java swing

我知道使用线程比使用c#DoEvents()更有效,但我仍然想知道java中是否存在等效函数。我用Google搜索,但我找不到任何东西。

3 个答案:

答案 0 :(得分:2)

您可以使用Thread.yield(),这是java对应物,可以自愿放弃对处理器的控制。

答案 1 :(得分:1)

您可以使用EventQueue.invokeLater()在所有待处理事件后附加Runnable。这个结果与您放在DoEvents()方法中的代码之前的C#Runnable.run()类似。

See Java documentation for EventQueue

例如,如果要让所有GUI控件失去焦点并丢失要执行的焦点事件,可以使用以下代码:

@Override 
public void windowClosing(WindowEvent e){
    // Clear the focus to allow last changes to be noted. 
    KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
    // We want to let other events (e.g. lost focus) run before we start closing.
    EventQueue.invokeLater( new Runnable() {
        @Override public void run() {
            // Do actual closing...
        }
    });
}

答案 2 :(得分:0)

它被称为事件循环。这个article显示了如何在Java中的UI组件中处理事件。