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