转自 http://blog.csdn.net/ecjtuxuan/article/details/2125023

怎么解决SWT多线程错误:Caused by: org.eclipse.swt.SWTException: Invalid thread access

我这几天研究JAVA做MSN,下载的示例都是在控制台下显示的,现在要做一个桌面MSN,要在界面上显示运行情况,比如,登录时,在文本框中显示"正在登录,请稍后....",登录成功后显示"登录成功....."等,以及其它一系列事件都要在界面上显示..

我用的是SWT Designer来做界面的,界面上有账号和密码输入框,登录及退出按钮,以及显示运行刻录的文本框.

现 在只是做了登录,要在文本框里显示登录情况,网上的代码都是通过System.out.println在控制台里显示,而现在我要将记录显示在文本框里, 开始时,我就直接按照调用类方法的办法调,可是总出现Caused by: org.eclipse.swt.SWTException: Invalid thread access这个错误,我查询后知道,这是因为SWT界面线程不能在其它线程里进行操作等.

由于以前没做过JAVA桌面程序,也没做过JAVA多线程,所以花了我一天多的时间,都没搞定.下午,在utopian的帮助下,才搞定,太多的道理我也说不清,呵呵,我对JAVA也不是很熟悉,只是在JSP里用到了点皮毛而已.我只说一下我的最后解决方法

我就是在那个新线程(其实是一个处理监听事件的接口对象)需要修改界面的地方,那一段代码包起来,比如在我这个MSN的处理对象中,有一个消息是登录成功的消息

原来在控制台下显示消息的代码:
  /**
   * 登录成功后执行该方法
   */
  public void loginComplete(MsnFriend own) {
   System.out.println(own.getLoginName() + " Login OK");
    }

而想要界面里显示,则改成:
  /**
   * 登录成功后执行该方法
   */
  public void loginComplete(MsnFriend own) {
    Display.getDefault().syncExec(new Runnable() {
    public void run() {
    allTxt.setText("登录成功....");
    }
    }); 
   }

开始我只是写了allTxt.setText("登录成功....");这行代码,就一直报那个错,后来,改成    
   Display.getDefault().syncExec(new Runnable() {
    public void run() {
    allTxt.setText("登录成功....");
    }
    }); 
   这样就没问题了,也就是说,在非SWT线程的线程里想要修改SWT界面,都要通过上面类似的办法来做,不然就会报错的

呵呵,就是这样,问我为什么,我也说不清,呵呵,也不敢乱说,怕误人子弟啊,如果你知道的话,就详细一点告诉我吧,也让大家来学习和分享你的知识

org.eclipse.swt.SWTException: Invalid thread access问题解决方法的更多相关文章

  1. 解决Eclipse异常关闭后重启报 org.eclipse.swt.SWTException: Invalid thread access 的问题

    . . . . . 很久没有写博客了,最近实在是太忙,一直想写点干货,但是一直没静下心来学习. 今天又在加班忙碌之中,结果谁知道越忙碌越出问题.先是 weblogic 没有正常启动,凭经验第一反应就是 ...

  2. SWT中的多线程(Invalid thread access)

    最近在学习swt的东西,遇到一个问题,特转录如下. SWT异常: org.eclipse.swt.SWTException: Invalid thread access 在创建SWT界面的线程之外的线 ...

  3. myeclipse 8.5打开文件Could not open the editor: Invalid thread access 异常

    最近打开了一个好久没用的myeclipse 8.5下的工作区间,导入一个项目,想打开文件编辑提示Could not open the editor: Invalid thread access

  4. org.eclipse.e4.core.di.InjectionException:org.eclipse.swt.SWTException: Widget is disposed

    org.eclipse.e4.core.di.InjectionException:org.eclipse.swt.SWTException: Widget is disposed 开发环境为ecli ...

  5. Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换

    Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换 解决方法:添加格式说明信息 将下面语句: \docum ...

  6. j2ee、mvn、eclipse、Tomcat等中文乱码问题解决方法

    一.更改jdk默认编码为UTF-8,保证启动的JVM不会出现中文乱码问题 1.在编译的时候,如果我们没有用 -encoding 参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们 ...

  7. eclipse打开jar包出现乱码问题解决方法

    今天做项目时候,用eclipse打开.class文件出现乱码问题.jar编码和本地编辑器编码格式不对造成的错误. 首先我们打开eclipse,点击菜单下的window-->preferences ...

  8. NetBeans invalid jdkhome specified 问题解决方法

    JDK的路径变化会导致 NetBeans 启动时出现错误: 解决办法: There's is an easy way to fix this. Navigate to your NetBeans in ...

  9. org.eclipse.swt.custom.StyledText.getScrollbarsMode()I

    错误: org.eclipse.swt.custom.StyledText.getScrollbarsMode()I 解决方法: 1 卸载,并手工清除myeclipse全部文件 2 重新安装myecl ...

随机推荐

  1. SVN关于忽略xcuserdata目录

    SVN关于忽略xcuserdata目录,以iPhone Qzone工程为例Xcode工程,xcuserdata目录一般位于blur.xcodeproj目录下面,eg:jonesduan-MacBook ...

  2. (NO.00005)iOS实现炸弹人游戏(七):游戏数据的序列化表示

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 用plist列表文件来表示游戏数据 因为在这个炸弹人游戏中有很多 ...

  3. python脚本程序,传入参数*要用单引号'*'

    *号作为python脚本的传入参数时,必须用单引号'',才能正确传入.如python test.py 2014 '*' age python test.py 2014 * age是错误的. 比如 te ...

  4. 未完成的IT路停在回车键---2014年末总结篇

    时间都去哪儿了?         一晃而过,越来越能体会到这个词的真实感.特别是过了二十岁,这种感觉越来越深刻,越来越强烈,犹如小编做公交车的时候一直向后排排倒的香樟树,还记得有首歌叫时间都哪儿了,而 ...

  5. TCP/IP入门(4) --应用层

    /** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...

  6. MO_GLOBAL - EBS R12 中 Multi Org 设计的深入研究(1)

    在改EBS的BUG过程中,会在网上查找很多资料,这次是碰到一个多组织(Multi Org)的问题,发现Anil Passi写的几篇文章不错,慢慢的会陆续翻译过来,这次翻译的是http://getapp ...

  7. pig读取部分列 (全部列中的少部分列)

    pig流式数据,load数据时,不能读入任意列. 但是,可以从头读,只能连续几列.就是前几列.比如10列数据,可以只读前3列.但不能读第3列: 如:数据testdata [wizad@sr104 lm ...

  8. Linux多线程实践(3) --线程属性

    初始化/销毁线程属性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *att ...

  9. Linux IPC实践(5) --System V消息队列(2)

    消息发送/接收API msgsnd函数 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 参数 msgid: 由ms ...

  10. JQuery设置checkbox的值,取checkbox的值,设置radio的值,取radio的值,设置下拉选select的值,取select的值

     一.复选框设置参数 html代码如下: <div class="flsm_btns">         <input type="hidden&q ...