Eclipse RCP中超长任务单线程,异步线程处理
转自:http://www.blogjava.net/mydearvivian/articles/246028.html
在RCP程序中,常碰到某个线程执行时间比较很长的情况,若处理不好,用户体验度是很糟糕的,如用户点了一个功能按钮后,进入功能执行,发现程序长时间没有任何响应,无疑这种情况下,用户是无法忍受的。
在这种情况下我们可以通过提供进度条对话框来改善用户体验度:
1)单步执行
程序执行期间不允许用户终止,贴下程序代码段
ProgressMonitorDialog progress = new ProgressMonitorDialog(null);
try {
progress.run(true, false, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask("复制文件", IProgressMonitor.UNKNOWN);
monitor.setTaskName("复制文件
");
Console.getInstance().info("正在复制文件,请稍候
");
copyFile(fileName, destFolder);
monitor.done();
Console.getInstance().info("复制成功");
}
});
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
若允许用户终止任务执行 则progress.run()第二个参数传true即可; monitor.isCanceled()方法判断当前是否被用户取消
2)异步执行
在RCP中要在非UI线程中执行UI线程的操作,最简单的方式就是display.syncExec或者display.asyncExec,如果UI线程所需的时间较长的话,则应该使用display.asyncExec
在执行异步线程的时候,我们一般应当继承Job或者UIJob类:UIJob是在UI线程中运行的,可以直接访问窗体组件。Job是在非UI线程中运行,如果在里面想访问窗体组件,需要通过Display.asynExec()或者synExec方式来执行。UIJob要尽量的短,不要过多的占用UI线程的时间。
也贴上例子吧:
Job job = new Job("执行异步线程") {
protected IStatus run(final IProgressMonitor monitor) {
monitor.beginTask("开始任务", IProgressMonitor.UNKNOWN);
monitor.setTaskName("Step 1
");
Console.getInstance().info("开始第一步
");
dothing1();
monitor.setTaskName("Step 2
");
Console.getInstance().info("开始第二步
");
dothing2();
monitor.setTaskName("Step 3
");
Console.getInstance().info("开始第三步
");
dothing3();
Console.getInstance().info("完毕");
monitor.done();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
//UI任务
}
});
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule(); Eclipse RCP中超长任务单线程,异步线程处理的更多相关文章
- 可视化(番外篇)——在Eclipse RCP中玩转OpenGL
最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...
- springboot 中如何正确在异步线程中使用request
起因: 有后端同事反馈在异步线程中获取了request中的参数,然后下一个请求是get请求的话,发现会偶尔出现参数丢失的问题. 示例代码: @GetMapping("/getParams&q ...
- Eclipse RCP 中创建自己定义首选项,并能读取首选项中的值
Eclipse RCP的插件中若想自定义首选项须要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse.u ...
- Erlang运行时中的无锁队列及其在异步线程中的应用
本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang ...
- 关于GCD同步组实现多个异步线程的同步执行中的注意点
在App开发中经常会遇到多个线程同时向服务器取数据, 如果每个线程取得数据后都去刷新UI会造成界面的闪烁 也有可能出现部分数据还没有获取完毕造成程序crash 之前在网上看到很多是利用dispatch ...
- 【转】RCP中org.eclipse.core.runtime.CoreException
org.eclipse.core.runtime.CoreException: Plug-in TRAIN was unable to load class train.Application. 利用 ...
- 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading
入门-------------------------------------------------------------------------------- 概述与概念 一个C#程序开始 ...
- 关于js中的同步和异步
最近看到前端面试问到js中的同步和异步,这个问题该怎么回答? 梳理一下,js对于异步的处理,很多人的第一反应是ajax,这只能说是对了一半. 1.个人觉得,js中,最基础的异步是setTimeout和 ...
- Promise-js中的同步和异步
js中的同步和异步 自从读了研后,走上了学术之路,每天除了看论文就是做实验,最后发现自己还是喜欢开发呀,于是我又重回前端啦~ 隔了这么久没学前端,好像很多东西都忘了不少,而且不得不说前端的技术更新 ...
随机推荐
- ios zxing扫码问题
在ios 中 扫瞄二维码,条形码基本有 2中第三方的库,一个是zbar 一个是zxing,zxing 在android中表现的比较出色,但是在ios 中不是很好用,扫瞄效率低,我们一般都用zbar,但 ...
- 07 ProgressDialog
<span style="font-size:18px;">package com.fmy.example1; import android.app.Activity; ...
- scala学习笔记5 (隐式转化/参数/类)
隐式转化: 隐式参数: 隐式类:
- unix os下du df简单用法
转自:http://dadoneo.iteye.com/blog/984963 du命令参数详解见:http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍 ...
- Redis简介以及数据类型存储
由于我们在大型互联网项目当中,用户访问量比较大,比较多,会产生并发问题,对于此,我们该如何解决呢,Redis横空出世,首先,我们来简单的认识一下Redis,详细介绍如下所示: Redis是一个开源的, ...
- Android中R文件的丢失问题以及aapt.exe停止工作如何解决
出现上面这个错误,说胆你的xml文件中出问题了..找了一下原因.如下.. R.java这个文件是会自动生成的.但是有时候你写错xml文件的时候,R.java是不会自动生成对应的值.这个时候我们会很习惯 ...
- UNIX网络编程——分析一帧基于UDP的TFTP协议帧
下图是UDP的段格式: 相比TCP段格式,UDP要简单得多,也没啥好说的,需要注意的是UDP数据长度指payload加上首部的长度. 下面分析一帧基于UDP的TFTP协议帧: 以太网首部 0000: ...
- 《java入门第一季》之集合框架(Collection小儿子Set集合)
/* * Collection主要的连个儿子: * |--List * 有序(存储顺序和取出顺序一致),可重复 * |--Set * 无序(存储顺序和取出顺序不一致),唯一 * * H ...
- Cocos2D中的纹理(textures)的解释
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- vbox centos安装增强工具
就是虚拟机识别不了宿主机的usb接口,这个虚拟机有没有图形界面,看看怎么装. 一个是依赖包问题,另一个就是挂了安装包,但是我怎么找到它并安装上去的问题. 虚拟机是centos6.6哈 vbox4.3. ...