2010-07-02 26 views
2

如何感受SwingUtilities.invokeLater()在任何swing應用程序中的基本性。請給出一些代碼示例。SwingUtilities.invokeLater()

+0

參見「延續爲對象」:http://en.wikipedia.org/wiki/Continuation_passing_style#Continuations_as_objects – trashgod 2010-07-02 01:28:36

回答

5

無論何時您需要在GUI中更新內容,都應該通過AWT事件線程來完成。

這是因爲AWT(和頂部的Swing)有它自己的線程來管理GUI的一切。沒有它,圖形界面不能以異步的方式處理事件和類似的事情,而你的程序正在做別的事情。

因此,舉例來說,如果你有一個Thread宣佈一項艱鉅的任務:

public void MyThread extends Thread 
{ 
    class GUIUpdate implements Runnable 
    { 
    GUIUpdate(String msg) 
    { 
     ... 
    } 

    public void run() 
    { 
     guiElement.appendText(msg); 
    } 
    } 

    public void run() 
    { 
    while (finished) 
    { 
     //do long calculations 

     //send partial output to gui 
     SwingUtilities.invokeLater(new GUIUpdate("something has changed!")); 
    } 
    } 
} 
相關問題