一:基本概念
在SWT内,有一个UI主线程的概念,自定义的线程不可操作UI控件,如果要操作则必须使用
display.asyncExec(new Runnable() {
public void run() {
// UI操作
}
});
需要注意的是:在Display.asyncExec()方法内运行的线程就是UI主线程,而不是用户自定义的线程。通过简单的实验可以知道,可见附件。
二:Display.asyncExec与Display.syncExec
display.asyncExec(new Runnable() {
public void run() {
// UI操作
}
});
Display.asyncExec()方法,下面的代码可以继续执行,而不用等到Display.asyncExec()的完成。
display.syncExec(new Runnable() {
public void run() {
// UI操作
}
});
Display.syncExec()方法,会让在下面的代码进入等待,需要等到Display.syncExec()的完成才可以继续向下执行。
三:Job与UIJob
1. Job与UIJob都必须工作在eclipse环境下,也就是Eclipse或RCP环境下。
2. 提供了进度条,子任务,状态等功能。
3. UIJob extends Job,UIJob是对Job的简单封装,使得任务运行于Display.asyncExec()方法内。
Job uploadJob = new Job("Job...") {
protected IStatus run(IProgressMonitor monitor) {
// 非UI线程,只能进行非UI的操作
}
}
UIJob dbJob = new UIJob("UIJob...") {
public IStatus runInUIThread(IProgressMonitor monitor){
// UI主线程,可进行UI操作
}
}
当然,需要在Job内进行UI操作,只需要使用Display.asyncExec或Display.syncExec即可。
四:IProgressService的busyCursorWhile与runInUI
IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
progressService.busyCursorWhile(new IRunnableWithProgress(){
public void run(IProgressMonitor monitor) {
// 非UI线程,只能进行非UI的操作
}
});
progressService.runInUI(
PlatformUI.getWorkbench().getProgressService(),
new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) {
// UI主线程,可进行UI操作
}
},
Platform.getWorkspace().getRoot());
五:Job的状态监听
Job的状态监听,涉及到一个接口IJobChangeListener,或者空实现类JobChangeAdapter。
IJobChangeListener用于对Job的状态进行监听,比如:开始执行,完成,睡眠等状态改变的时候。
六:Job异常处理
异常的处理可以有不同:
1. 将异常直接抛出来:在Job执行过程中,返回带有Exception的Status。
protected IStatus run(IProgressMonitor monitor) {
try {
doJob(monitor); // false
} catch (Exception e) {
return new Status(Status.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
}
return Status.OK_STATUS;
}
};
2. 所有Job完成后进行错误提示:在Job执行过程中,可以将异常保存起来,并借助于IJobChangeListener的done进行job完成后的操作,比如进行异常提示等操作。
job.addJobChangeListener(new JobDoneListener());
class JobDoneListener extends JobChangeAdapter {
@Override
public void done(IJobChangeEvent event) {
if (exception != null) {
exception.printStackTrace();
}
分享到:
相关推荐
該文檔是 工作中遇到ui层先后展示问题,查询的swt rcp ui 多线程原理,分享给大家,希望能共同学习
局域网聊天 SWT Java QQ 多线程的处理已经解决 非常好的学习资料
SWT并发例子(后台耗时线程)前台点击按钮,后台执行一个耗时操作。
swt页面后台多线程接受ModBUS协议Socket通讯的数据
用swt开发多用户聊天程序。SWT/jface等GUI类库开发简易聊天室系统+java多线程。
线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配.线程越...
该软件是一个基于java语言的socket编程,可以实现单个服务器对应多个客户端的聊天。采用swt,功能还是比较完善的。
SWT同样不允许主线程外的其他线程直接访问控件。 所以SWT为我们提供了async执行Runnable的方法。 但是该方法只是用于接收异步线程消息,如果你在该方法中做过多的事情同样会造成UI线程的阻塞。 因此,笔者模仿...
主要运用swt绘制界面,orcal数据库对数据进行管理,运用jdbc对数据进行操作,有些功能还运用到多线程技术。主要分为客户预定酒店端和酒店管理人员对客户预定的房间的一个处理和客户资料,房间管理等功能。
11.5 多线程程序设计 238 11.6 本章小结 243 第12章 SWT系统资源 244 12.1 系统资源概述 244 12.1.1 什么是系统资源 244 12.1.2 释放资源的原则 245 12.1.3 访问资源的原则 246 12.1.4 何时释放资源 ...
Java 文件传输系统 对于swt socket 多线程 初学者有用
AWT-SWT-Swing AWT-SWT-Swing AWT-SWT-Swing AWT-SWT-Swing 大比较之一:模型设计与实...图形用户界面系统在事件处理设计上有两大类,一类是单线程模型,一类是多线程模型。在事件处理机制上,三者都是遵循单线程规则。
同时程序采用多线程机制,利用UDP包,模拟ARQ自动重传协议。 ARQ协议的内容:自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一。它包括停止等待ARQ协议和连续ARQ协议,错误...
Eclipse插件开发简介,Eclipse中CVS的使用, SWT常用组件
java入门类,上百这种格式java源程序,包括swt,多线程,网络编程。不要积分吧,方便大家交流资源!
做了一个简单的瓦片地图下载器,swt+java多线程下载,仅供学习研究使用,需要代码可以邮件shihui.cai@163.com,我是用的64位环境,运行需要jdk支持。
SWTBot是用于SWT / RCP应用程序的自动化和测试工具,具有记录和回放脚本的功能。 功能将包括基于文本的脚本,对测试套件的回放,报告和多线程回放的ant支持。