Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access. 錯誤解決
阿新 • • 發佈:2019-02-20
執行SWT GUI的應用程式是遇到異常:
Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4491) at org.eclipse.swt.SWT.error(SWT.java:4406) at org.eclipse.swt.SWT.error(SWT.java:4377) at org.eclipse.swt.widgets.Widget.error(Widget.java:482) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:373) at org.eclipse.swt.widgets.Text.append(Text.java:437) at com.thomsonreuters.timeseries.HMC.GUI.DoWork.run(DoWork.java:51) at java.lang.Thread.run(Unknown Source)原因: 在寫使用者介面是通常畫靜態介面放在一個類,稱為UI執行緒。而某個按鈕或事件觸發的另一個事件發生時,起一個執行緒去處理這個事件,這個執行緒叫非UI執行緒。如果你在非UI執行緒裡面對介面的變數,如:某個按鈕、text等,就會報上面的錯誤。因為程式找不到對應的Display。如果您瞭解Display功能就會很容易理解這個問題,Display的作用就是負責enent loop, font,color,UI執行緒和其他執行緒的通訊。
解決方法: 在非UI執行緒操作操作UI執行緒的地方加上
Display.getDefault().syncExec(new Runnable(){
public void run() {
// 需要操作的ui執行緒的程式碼
}
});