SWT:程序中开启了一个线程,要改变界面,抛出: org.eclipse.swt.SWTException: Invalid thread access
在创建SWT界面的线程之外的线程中尝试去修改界面元素.将抛出以下异常 Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:2942) at org.eclipse.swt.SWT.error(SWT.java:2865) at org.eclipse.swt.SWT.error(SWT.java:2836) 上述Thread-0是另外开启的一个线程. 【解析】: 在SWT程序中, SWT会自动创建一个用户界面线程 非用户界面线程不能直接操作用户界面线程 要想在另外一个线程中尝试修改用户界面,应采用一下方法:
if
(
!
this
.display.isDisposed()) {
Runnable runnable = new Runnable() { public void run() { // 你改界面的代码 } }; display.syncExec(runnable); // 关键在这一句上 } swt-doc中的说明:
public void syncExec(java.lang.Runnable runnable)
此外,与之对应的另一个方法:
public void asyncExec(java.lang.Runnable runnable)
|
附例参考:
public void loginComplete(MsnFriend own) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
//需要修改界面的代码
allTxt.setText("登录成功....");
}
});
}
注:转摘。感谢提供帮助给大家的所有朋友。