我第一次使用線程時遇到了一個問題,在主線程中的SWT程序中,我創建了GUI並打開了shell,然後啓動了一個新線程以運行一些邏輯模型,並且在模型中處於某種特定狀態時,在GUI類中調用了一個方法...這裏是問題 在第二個線程中調用此方法,而我希望在主線程中調用此方法或至少在主線程中執行它SWT單線程問題
我該如何解決這個問題? 謝謝,
我第一次使用線程時遇到了一個問題,在主線程中的SWT程序中,我創建了GUI並打開了shell,然後啓動了一個新線程以運行一些邏輯模型,並且在模型中處於某種特定狀態時,在GUI類中調用了一個方法...這裏是問題 在第二個線程中調用此方法,而我希望在主線程中調用此方法或至少在主線程中執行它SWT單線程問題
我該如何解決這個問題? 謝謝,
外部線程無法訪問GUI。檢查display.asyncExec
。
http://help.eclipse.org/help32/ index.jsp?topic =/org.eclipse.platform.doc.isv/guide/swt_threading.htm – 2010-03-03 23:22:45
http://book.javanb.com/swt-the-standard-widget-toolkit/ch05lev1sec7.html – 2010-03-03 23:23:04
您需要使用在Display
類asyncExec
或syncExec
方法,以便在主線程中執行的可運行:
// do stuff in a background thread
// ...then schedule job to run in main thread
display.asyncExec(new Runnable() {
...
});
兩個syncExec
和asyncExec
將在主(UI)線程調度作業儘快地。不同的是,asyncExec
立即返回,而syncExec
將不會返回,直到作業完成。
相關鏈接: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