`
my520
  • 浏览: 8373 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

org.eclipse.swt.SWTException: Invalid thread access异常

阅读更多
在SWT程序中,SWT会自动创建一个用户界面线程,非用户界面线程不能直接操作用户界面线程,要想在另外一个线程中尝试访问或修改用户界面,应采用一下方法.
Thread t1=new Thread(){
   public void run(){
   try{ 
       windowDisplayBar.getDisplay().syncExec(new Runnable(){
public void run(){
System.out.println("windowDisplayBar:"+windowDisplayBar);
}
});
    }catch(Exception e){
e.printStackTrace();
     }
    }
};
总结一下也就是 SWT的在对其组件进行操作的时候有一个单线程的约束,直接的赋值方式是行不通的,SWT在*.widget.Display类中提供了两个方法可以间接的在非用户线程的进行图形构件的访问操作,这是通过异步启动新的线程的asyncExec(Runnable)和同步启动新的线程的syncExec(Runnable)两个方法去实现的。他们区别在于前者UI线程不会等待runnable对象执行结束后再继续进行,就是说UI线程可以和Runnable对象所在的线程同时运行,即无论指定的线程是否执行都会立即返回到当前线程;而后者则要在指定的等待runnable线程执行结束后才返回,比较耗时。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics