关于SWT的线程问题
大部分情况下,GUI界面编程是不用考虑线程问题的,SWT已经帮助我们隐藏了底层的线程调用.
但是一些特殊应用的实现,却不得不涉及SWT线程编程.比如说当进度条的例子(以后要加上,现在还没有做,没有总结).
当开始执行后界面很难再被操作.有一种死机的感觉.这就主要是因为其事件处理占用了整个线程.
在实际项目开发中,一种常见的应用是.单击界面的"实行"按钮后,在后台处理一些超长事件的任务,任务的执行情况要及时反映在界面上,而且还不能影响前台界面的其他操作.
这种应用的实现思路如下:
1.前台界面和后台的程序是分成了两个类.
2.为后台程序另开一个线程,这样就可以让前台界面操作不受后台处理的影响.
3.前台界面提供一些可以操作组件的方法.后台处理程序则调用这些方法将执行情况的字符串写入到前台界面的组件中.(如文本框)
这种思路必须解决一个关键问题:界面本身有一个默认的线程,后台程序又是另外一个线程,那么该如何在一个线程中访问另外一个线程呢?问题的解决方法很简单,仅要记住的两个核心要点如下:
(1)为后台新开一个线程,这要用到JDK中线程的知识.代码示例如下:
new Thread(){//新开一个线程,这是匿名内部类的写法
public void run(){
//后台任务......
}
}
start();//表示立即启动这个线程
(2)从后台处理线程中访问前台界面组件.关键在于使用Display对象.因为Display主要负责管理实践循环和控制UI线程和其他线程之间的通信.Display的具体使用方法如下:
>>>>>>>未完待续>>>>>>>>>>>>>>>>>
SWT线程虽然实现较简单,但是其涉及到的Java多线程编程却是相当复杂的.特别要注意到多线程对变量的影响.具体内容要参照java中的线程内容.
一般情况下,界面开发中不需要去涉及多线程,即使使用也要十分小心.不可以随便大意,要知道多线程引起的BUG是很难查找出来的.
关于SWT的线程问题的更多相关文章
- SWT中的多线程(Invalid thread access)
最近在学习swt的东西,遇到一个问题,特转录如下. SWT异常: org.eclipse.swt.SWTException: Invalid thread access 在创建SWT界面的线程之外的线 ...
- org.eclipse.swt.SWTException: Invalid thread access问题解决方法
转自 http://blog.csdn.net/ecjtuxuan/article/details/2125023 怎么解决SWT多线程错误:Caused by: org.eclipse.swt.SW ...
- Java琐记
svn项目倒入,所选的文件夹一定是src上面以及的:然后eclipse会自动创建一个项目,项目名称就是src上级文件夹的名称:然后会按照路径下的文档结构如导入到eclipse的结构中: 被标记为// ...
- JVM垃圾回收(上)
Java 中的垃圾回收,常常是由 JVM 帮我们做好的.虽然这节省了大家很多的学习的成本,提高了项目的执行效率,但是当项目变得越来越复杂,用户量越来越大时,还是需要我们懂得垃圾回收机制,这样也能进行更 ...
- Atitit.swt 线程调用ui控件的方法
Atitit.swt 线程调用ui控件的方法 1 SwingUtilities.invokeLater1 2 display.asyncExec方法1 3 display.timerExec(500 ...
- 关于 SWT 的UI线程和非UI线程
要理解UI线程,先要了解一下“消息循环”这个概念.链接是百度百科上的条目,简单地说,操作系统把用户界面上的每个操作都转化成为对应的消息,加入消息队列.然后把消息转发给对应的应用程序(一般来说,就是活动 ...
- swt进度条 线程
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import java.util.Rando ...
- swt 更新主UI线程
// 将msg送回对应的Applet public void write(String msg) { synchronized (msg) { try { m_out.writeUTF(msg); } ...
- Java多线程线程学习(一)
一.操作系统级别的进程与线程1.进程: 一个计算机程序的运行实例.包含了需要执行的指令,有自己的独立地址空间,是互相隔离的.进程拥有各种资源和状态信息,包括打开的文件.子进程和信号处理.2.线程: 表 ...
随机推荐
- 如何添加网站for Linux(绑定域名)
[以下配置的路径以阿里云提供的标准环境路径为准,如果您另行安装,请根据实际安装路径配置]. 1.cd /alidata/server/httpd/conf/vhosts/ 进入绑定域名所在目录, ...
- ASIHTTPRequest 编码问题
今天在模拟登陆时,中文的用户名一直登陆不上,对用户名进行了各种转码还是不能解决. 在这个问题上一直卡了半个多小时,最终才发现根本不是用户名的编码问题,而是使用的第三方网络插件的ASIHTTPReque ...
- ios开发中,A valid provisioning profile for this executable was not found,的解决方法
手头上的一个ios项目在上架后,再进行时出现了以上的这个错误,这是上架后忘了对一些配置进行复原 我的项目解决方法是: 是上面的这一块出现了问题,图片上的配置是正常的情况,但是上架的时候对其进行了修改, ...
- openstack学习线路指导
原文链接: http://www.aboutyun.com/thread-7225-1-1.html 网上很多hadoop资料,openstack资料相对较少,这里整理一下,帮助初学者尽快入门. 首先 ...
- leetcode@ [307] Range Sum Query - Mutable / 线段树模板
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- linux大于2T的磁盘使用GPT分区方式
MBR(Master Boot Record)(主引导记录)和GPT(GUID Partition Table)(GUID意为全局唯一标识符)是在磁盘上存储分区信息的两种不同方式 对于传统的MBR分区 ...
- 转载 ASP.NET常用的正则表达式
转载原地址: http://www.cnblogs.com/0001/archive/2010/01/26/1656677.html 常用表达式: "^\d+$" //非负整数(正 ...
- SQL2005查询所有表的大小
IF NOT EXISTS (SELECT * FROM [tempdb].sys.objects WHERE object_id = OBJECT_ID(N'[tempdb].[dbo].[tabl ...
- S2SH项目框架搭建(完全注解)
1.引入相关jar包 2.配置Spring配置文件,命名为applicationContext.xml(配置好后放到src目录下) <beans xmlns="http://www.s ...
- Java经典面试题
1. Java中的异常处理机制的简单原理和应用. 当Java 程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是Java类库内置的语义检查. ...