关于SWT开发的一个坑——Invalid thread access

Button createCodeBtn = new Button(shell, SWT.CENTER);
		createCodeBtn.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {

				try {
					if(txtXMLSrc.getText().trim().equals("") || txtCodeTo.getText().trim().equals("")) {
						lblErrorMsg.setVisible(true);
						new Timer().schedule(new TimerTask() {
							public void run() {
//								Display.getDefault().syncExec(new Runnable() {
//								    public void run() {
								    	lblErrorMsg.setVisible(false);
//								    }
//							    }); 
							}
						}, 3 * 1000);
						return;
					}
					Main.geneCode(txtXMLSrc.getText() ,txtCodeTo.getText());
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
			}
		});

这里我在按钮createCodeBtn点击事件中写了个定时器new Timer(),定时器是用的匿名类实现的schedule方法,定时器作用是过3s就把lblErrorMsg设置为隐藏。一开始报这个Invalid thread access我还以为是因为匿名内部类传参有问题,于是去查,试过各种final方法后来还是不行,后来我偶然一查发现有篇帖子介绍SWT这个坑,于是试了下,的确就是这个Display.getDefault().syncExec(new Runnable()的坑。

上面代码我注释掉这几行就会报错,正确做法就是不注释。

时间: 2024-08-25 05:56:00

关于SWT开发的一个坑——Invalid thread access的相关文章

Eclipse启动 org.eclipse.swt.SWTException: Invalid thread access问题解决方法

最近使用eclipse的时候,当选择完workspace之后,eclipse开始加载启动,在这个阶段经常出现闪退出的情况. 看到日志文件提示一下内容: org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4441) at org.eclipse.swt.SWT.error(SWT.java:4356) at org.eclipse.swt.SWT.error(SWT.j

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

. . . . . 很久没有写博客了,最近实在是太忙,一直想写点干货,但是一直没静下心来学习. 今天又在加班忙碌之中,结果谁知道越忙碌越出问题.先是 weblogic 没有正常启动,凭经验第一反应就是7001端口被其它程序占用了,然后通过命令查看之后,发现果然是被占用了,占用端口的竟然是Eclipse,查找占用端口的方式请移步至博主的另一篇文章<[windows]查询占用端口的程序——记一次解决webloigc启动失败的过程>. Eclipse之前是不占用7011端口的,这次占用估计可能是启动

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

最近打开了一个好久没用的myeclipse 8.5下的工作区间,导入一个项目,想打开文件编辑提示Could not open the editor: Invalid thread access 解决办法: 1:cmd 进入myeclipse的安装目录 找到myeclipse.exe所在位置目录 2:执行myeclipse.exe -clean,会弹出一个启动窗 3:测试 再打开文件就库进行编辑了

移动端开发碰到一个坑

移动端开发真是不断踩坑,今天在做一个移动端的组件,又发现了一个坑,记录到日志里面,做个记录,以便以后再遇到这个问题有个记录可以参考. 在ios中的chrome浏览器中,手指从屏幕上方移动出屏幕(一定要经过屏幕边缘划出屏幕)时,不能触发touchend的事件,但是这个touchend事件并不是消失了,而是等到下次触摸屏幕的时候才会触发. 这个问题搞得我想到无奈,我的需求是一个容器内做一个动画,当手指离开屏幕时,也就是touchend时启动这个动画,有了这个问题,当手指是经过屏幕上边缘而离开屏幕是,

org.eclipse.swt.SWTException: Invalid thread access问题解决方法

1.找到MyEclipse/Eclipse的安装目录 2.找到myeclipse.exe/eclipse.exe 3.创建快捷方式 4.在快捷方式上右键属性 5.在目标栏加上-clean 确定就可以了,原因是对插件MyEclipse/Eclipse使用的缓存 因为插件的缓存不完整,所以出现这种问题,在右键属性目标加-clean就可以了

Eclipse SWT开发教程以及一个连连看游戏的代码实现下载

原创整理不易,转载请标明出处:Eclipse SWT开发教程以及一个连连看游戏的代码实现下载 代码下载地址:http://www.zuidaima.com/share/1772672482675712.htm 我在前面讲过:如果讲GUI编程一味只讲各个控件的使用方法,那么纯粹是浪费大家时间,如果出书,那绝对是骗钱的.所以我并不会详细地讲解SWT各个控件的具体使用方法.然而的众所周知,Eclipse的UI界面是建立在SWT基础之上的,如果一字不提SWT,似乎也不大可能.SWT是一个优秀的GUI编程

记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑

我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也是我开发的,因此我将域名a加到了该服务的HTTP响应结构的头文件里,这样就允许了域名a上的JavaScript代码用AJAX访问域名b的服务. 域名b上的服务是一个Servlet,允许域名a跨域访问的代码就一行: protected void doGet(HttpServletRequest req

Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!

http://blog.csdn.net/yanzi1225627/article/details/8582081 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限. 下面看例子: package org.thread.demo; class MyThread extends

Android使用WebView开发常见的坑

原文链接:http://mp.weixin.qq.com/s?__biz=MzAwODE1NTI2MQ==&tempkey=uP3a%2BOgIN7vPbLfJp3BTCl2KabYi1%2FfBUQEkkQD7ixoNgGn4JfrR81AwdwsBof%2FhsiCe4%2B9o0KJQ6lv%2B32pSyH46EQAIwJ5i%2BxxED%2BjrIpwHyFCFbDUibPnNlrZDxQAc4JV34qtCRBPLX6fF3qjtjQ%3D%3D&chksm=1b727810