关于SWT开发的一个坑——Invalid thread access
2015-08-16 00:00
211 查看
摘要: 解决方案:Display.getDefault().syncExec(new Runnable() {
public void run() {
allTxt.setText("登录成功....");
}
});
这里我在按钮createCodeBtn点击事件中写了个定时器new Timer(),定时器是用的匿名类实现的schedule方法,定时器作用是过3s就把lblErrorMsg设置为隐藏。一开始报这个Invalid thread access我还以为是因为匿名内部类传参有问题,于是去查,试过各种final方法后来还是不行,后来我偶然一查发现有篇帖子介绍SWT这个坑,于是试了下,的确就是这个Display.getDefault().syncExec(new Runnable()的坑。
上面代码我注释掉这几行就会报错,正确做法就是不注释。
public void run() {
allTxt.setText("登录成功....");
}
});
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()的坑。
上面代码我注释掉这几行就会报错,正确做法就是不注释。
相关文章推荐
- java-模拟tomcat服务器
- Access 2000 数据库 80 万记录通用快速分页类
- 十万条Access数据表分页的两个解决方法
- VB6实现连接Access数据库的ADODB代码实现方法
- Access中字段上自动打开的输入法的解决方法
- Access to SQLserver 数据库生迁脚本编写器(DB_CreateSqlEV1.06下载)
- asp Access数据备份,还原,压缩类代码
- PostgreSQL ERROR: invalid escape string 解决办法
- VB使用ADO操作Access数据库
- 文本、Excel、Access数据导入SQL Server2000的方法
- Access 数据类型与 MS SQL 数据类型的相应
- ASP代码实现自动清除替换ACCESS(MDB)数据库的日文字符的
- 通过asp程序来创建access数据库
- Access转SqlServer的注意事项
- C#多线程之Thread中Thread.IsAlive属性用法分析
- Access和SQL Server里面的SQL语句的不同之处
- ACCESS数据库修改自动编号的ID值为零的方法分享
- access 数据库自启动困难解决方法
- access的备注字段限制64K
- Access出现"所有记录中均未找到搜索关键字"的错误解决