关于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.线程: 表 ...
随机推荐
- leetcode–Binary Tree Maximum Path Sum
1.题目说明 Given a binary tree, find the maximum path sum. The path may start and end at any node in t ...
- 深度学习 CNN CUDA 版本2
作者:zhxfl 邮箱:zhxfl##mail.ustc.edu.cn 主页:http://www.cnblogs.com/zhxfl/p/4155236.html 第1个版本blog在这里:http ...
- WEB开发总结(持续更新。。。)
近期开始搞搞web的东西,觉得有必要把遇到的问题总结一下,就在这里当做个笔记本吧. 1.用maven建立的web工程,在运行的时候,右键找不到“Run on server”菜单: 可以在命令提示行中, ...
- 使用SVN服务器管理源码
最近在学习使用SVN管理自己的项目文件,正好有好的文章就拿来标记一下,正所谓: 站在巨人的肩膀上 天下知识为我所用 转载两篇关于使用SVN管理源码的文章. 使用SVN进行源码管理(上):http: ...
- light oj 1116 - Ekka Dokka
1116 - Ekka Dokka PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Ekka ...
- [Objective-c 基础 - 1.2] OC的基本类
#import <Foundation/Foundation.h> typedef enum {GenderMan, GenderFemale} Gender; typedef enum ...
- 转载LINQ TO Entity 在数据库发生更改时更新实体数据模型 .edmx 文件
转载原出处:http://blog.csdn.net/litao2/article/details/8629335 在“模型浏览器”中,右击 .edmx 文件,然后选择“从数据库更新模型”. 模型更新 ...
- 转载Entity Framework全面教程
转载原地址:http://www.cnblogs.com/lsxqw2004/archive/2009/05/31/1495240.html#_Toc228672754 预备知识 2 LINQ技 ...
- Keil MDK 无法设置断点【worldsing】
要解决一个问题就怕不知道怎么搜索,或是别人没有遇到过: 同样碰到Keil MDK Debug调试无法设置断点问题,首先来问百度,GOOGLE,一下是我搜索到的结果: 1.keil 不能设置断点,每 ...
- GridView多行标题行、改造标题行、自定义标题行完美版
网上找了个找,最终还是自己做的比较靠谱,道理很简单,直接看代码 代码: /// <summary> /// =================== 两行标题行 ============ ...