本文介紹了SWT/Swing-&;線程N&;#39;地獄的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個SWT應用程序。我對SWT感到沮喪,因為它沒有讓我想做的事情變得容易。所以我用了秋千。搖擺讓我的生活變得輕松。太好了。只是現在,兩個人得談談。問題是,它們運行在不同的線程上,每當我嘗試從Swing運行SWT GUI方法時,都會得到:
Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access
哦,太好了。那么,我該怎么解決這個問題呢?如果這是Objective-C,我可以使用:
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait
但它不是,所以我不能。有沒有辦法在線程B上運行方法A?該線程存在的時間?
推薦答案
我用過的swt不多,但是swt似乎會嚴格禁止訪問非UI線程中的swt對象。您可以將與SWT上的對象對話的請求排隊。
This鏈接更好地解釋了這一點
該示例建議您使用syncExec
display.syncExec(
new Runnable() {
public void run(){
label.setText(text);
}
});
我可以假定這將使主SWT UI線程上的Runnable排隊,因此訪問將是合法的。
注意:我再次閱讀了鏈接,syncExec將最終凍結您的Swing EDT。如果調用syncExec,它將在SWT隊列上拋出Runnable并等待其完成。您可以查看asyncEvent以將Runnable拋到隊列中,然后繼續工作。
這篇關于SWT/Swing-&;線程N&;#39;地獄的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,