2010-07-22 112 views

回答

2

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

+6

'Thread.yield()'不会如果调用代码位于GUI线程上,则可以提供帮助,因为事件在同一线程上分派。 – amotzg 2012-10-02 14:51:10

0

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

1

在所有未决事件之后,您可以使用EventQueue.invokeLater()附加Runnable。这有一个类似于C#的DoEvents()的结果,它出现在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... 
     } 
    }); 
}