一:基本概念
在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();
}
分享到:
相关推荐
本文将深入探讨SWT中多线程的使用,特别是与UI交互相关的多线程原理。 首先,我们需要理解UI线程,也称为事件调度线程或AWT/SWT线程,它负责处理所有的用户界面更新和事件处理。在SWT中,所有的GUI操作必须在UI线程...
本主题将深入探讨如何利用SWT(Standard Widget Toolkit)和Java来构建一个局域网内的聊天应用,并解决其中涉及的多线程问题。SWT是Eclipse基金会提供的一个开源GUI库,它为Java开发者提供了与操作系统更紧密集成的...
SWT(Standard Widget ...这涉及到对Java多线程的理解,以及如何在SWT环境中正确地在事件调度线程和后台线程之间切换,以处理UI更新和耗时任务。通过这种方式,我们可以构建出高效且用户体验良好的桌面应用程序。
由于SWT组件的设计原则是基于单线程模型,即所有的UI操作必须在UI主线程中执行,因此在多线程环境下容易引发线程冲突。本文将详细探讨SWT中的线程冲突问题及其解决方案。 #### SWT线程冲突的原理 SWT库设计之初就...
标题"swt页面后台多线程接受ModBUS协议Socket通讯的数据"表明,我们正在讨论一个基于SWT的Java图形用户界面(GUI),该界面的后台使用多线程技术来处理通过Socket接收的遵循ModBUS协议的数据。这样的设计允许用户...
用swt开发多用户聊天程序。SWT/jface等GUI类库开发简易聊天室系统+java多线程。
该源码项目基于SWT技术,实现了一个跨平台的Java多线程文件断点续传下载系统。项目总文件量为117个,其中包括49个类文件、24个Java源文件、22个JAR文件、8个JPG图片文件、4个PNG图片文件、2个Markdown文件和2个...
总的来说,这个Java Socket多线程聊天软件利用了Java的网络编程能力、多线程特性和SWT GUI库,实现了服务器与多个客户端之间的实时、双向通信,为用户提供了一个实用的在线聊天平台。通过这样的实践,开发者可以深入...
综上所述,开发一个全屏SWT多媒体播放器涉及多方面的技术和细节。从SWT的基本使用到多媒体播放的实现,再到用户界面的设计和优化,都需要开发者具备扎实的编程基础和对多媒体技术的理解。在实际开发过程中,还需要...
线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配.线程越...
- SWT对多线程的支持更好,适合复杂的多线程GUI应用。 - Swing则提供跨平台的一致性,并且拥有丰富的内置组件和事件模型。 3. SWT组件 SWT包括各种常见的GUI组件,如按钮(Button)、文本框(Text)、列表(List...
这个项目是一个典型的Java GUI应用程序示例,结合了SWT库的使用,多线程编程,以及与操作系统的交互,为用户提供了一种方便的定时关机解决方案。通过研究其源代码,开发者可以学习到如何构建类似的应用,并深入了解...
在多线程方面,SWT提供了一个安全的线程模型,确保所有的UI更新都在主线程(通常称为UI线程或Event Dispatch Thread)中执行。这避免了因多线程操作界面导致的竞态条件和死锁问题。开发者可以通过`Display.syncExec...
3. **消息循环**:SWT使用了类似Windows的消息循环机制,而不是Swing中的事件分发线程。通过不断地读取消息并分发处理,维持窗口的响应状态。 ### 结论 SWT作为一款强大的GUI组件库,对于那些希望在Java应用程序中...
不同于MFC使用窗口查找表的技术可能会导致线程间消息传递的问题,SWT的设计更加健壮,能够更好地处理多线程环境下的消息。SWT利用了JNI的特性,确保即使在多线程环境中也能正确地处理消息。 #### 四、与其他框架的...
6. **多线程处理**:为了保证界面的响应性,视频播放通常在后台线程进行,防止阻塞主线程。 7. **音频同步**:视频播放器还需要处理音频和视频的同步问题,确保音画同步。 8. **格式支持**:集成的多媒体库决定了...
它是Eclipse项目的一部分,提供了与操作系统更紧密集成的功能,比如原生对话框、控件和多线程支持。标题提到的是SWT的4.3版本,提供了适用于64位和32位操作系统的jar包。 在Java中,JVM(Java虚拟机)根据安装的...
如果需要创建多个同时活动的 Display 实例必须在不同的线程中创建它们,并使用 Display 的 getCurrent 函数得到当前线程对应的 Display 实例。 在 SWT 中,为了使资源管理方便而规定:当父资源被释放时,它要负责...
SWT 的优势在于它使用本地组件,这意味着 SWT 应用程序具有更好的性能和原生外观,同时支持更多的操作系统特性。由于 SWT 直接调用操作系统 API,所以它的应用程序看起来和行为更接近于原生应用。此外,SWT 也提供了...