同步模式和异步模式 Eclipse的工具开发:异步作业调度[2]
Eclipse的工具开发:异步作业调度[2]
——此文章摘自《自己动手写开发工具 基于Eclipse的工具开发》定价 ¥ 特价 ¥ 详细>>//track linktech cn/?m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>public interface IRunnableWithProgress { public void run(IProgressMonitor monitor) throws InvocationTargetException InterruptedException; }
这个类的使用和Runnable非常相似 只要把任务放到run方法中就可以了 最重要的是可以调用monitor来对当前进度显示进行控制 下面就是一个完整的进度条演示例子
ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell); dialog run(true true new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException InterruptedException { final int ticks = ; monitor beginTask( 开始操作 ticks); try { for (int i = ; i < ticks; i++) { if (monitor isCanceled()) throw new InterruptedException(); monitor worked( ); } } finally { monitor done(); } } });
调用beginTask方法来完成任务 ticks 参数表示此任务有多少工作量 调用worked方法报告自上次报告以来当前完成的任务数量 在循环中不断通过isCanceled方法判断当前任务是否被用户取消 需要注意 要在finally中调用done方法完成任务 否则会出现进度对话框无法正常关闭的情况
![同步模式和异步模式 Eclipse的工具开发:异步作业调度[2]](http://img.zhputi.com/uploads/090e/090ed3ca26b2912e71f0aa860b062db537896.jpg)
除了ProgressMonitorDialog外 在Eclipse中还可以通过其他方式显示进度 比如IWorkbenchWindow 通过在工作台窗口的状态行中显示进度来实现此界面 WizardDialog在向导状态行中显示长时间运行的操作
除了可以自己构造进度对话框来显示进度之外 我们还可以调用平台的进度服务 而且Eclipse也推荐使用平台的进度服务 这样可以使所有插件都将具有一致的进度表示 平台的进度服务定义为接口IProgressService 我们可以通过PlatformUI getWorkbench() getProgressService方法来调用系统的进度服务 例如 IProgressService progressService = PlatformUI getWorkbench() getProgressService(); progressService busyCursorWhile(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { //执行耗时的操作 } });
在调用Eclipse的方法或者第三方插件的一些方法的时候 有的方法要求传递一个实现了IProgressMonitor的实例进去 如果我们无法传递或者无需传递的时候 最好不要传递null值进去 而是要传递NullProgressMonitor的一个实例进去 此类位于 eclipse core runtime包下 它实现了 IProgressMonitor接口 但是所有方法都是给的空实现 传递此类就避免了被调用方法没有进行空指针判断而造成的麻烦
lishixinzhi/Article/program/Java/ky/201311/29187