« Swing单线程开发引起的问题« »SWT中运用多线程编程 »
解决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)
Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity. The thread which calls this method is suspended until the runnable completes.
Parameters:
runnable - code to run on the user-interface thread.

此外,与之对应的另一个方法:

public void asyncExec(java.lang.Runnable runnable)
Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity. The caller of this method continues to run in parallel, and is not notified when the runnable has completed.
Parameters:
runnable - code to run on the user-interface thread.
 


Tags: SWT-Designer-研究学习  

原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/

本文链接地址:http://www.busfly.net/csdn/post/eclipse-swt-SWTException-Invalid-thread-access.html

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
Feed订阅集
网站分类
勤劳致富^.^
最近发表
最新评论及回复
最近留言
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(VS为主):3769186.