2010-07-22 144 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... 
     } 
    }); 
}