2010-03-03 53 views
3

我第一次使用線程時遇到了一個問題,在主線程中的SWT程序中,我創建了GUI並打開了shell,然後啓動了一個新線程以運行一些邏輯模型,並且在模型中處於某種特定狀態時,在GUI類中調用了一個方法...這裏是問題 在第二個線程中調用此方法,而我希望在主線程中調用此方法或至少在主線程中執行它SWT單線程問題

我該如何解決這個問題? 謝謝,

+0

相關鏈接:http://help.eclipse.org/help32/ http://stackoverflow.com/questions/1333377/how-to-update-a-gui-from-another-thread-in-java – 2010-03-03 23:29:22

回答

3

外部線程無法訪問GUI。檢查display.asyncExec

+0

http://help.eclipse.org/help32/ index.jsp?topic =/org.eclipse.platform.doc.isv/guide/swt_threading.htm – 2010-03-03 23:22:45

+2

http://book.javanb.com/swt-the-standard-widget-toolkit/ch05lev1sec7.html – 2010-03-03 23:23:04

3

您需要使用在DisplayasyncExecsyncExec方法,以便在主線程中執行的可運行:

// do stuff in a background thread 

// ...then schedule job to run in main thread 
display.asyncExec(new Runnable() { 
    ... 
}); 

兩個syncExecasyncExec將在主(UI)線程調度作業儘快地。不同的是,asyncExec立即返回,而syncExec將不會返回,直到作業完成。