Eclipse RCP 开发中的进度条显示

来源:互联网 发布:全职主妇 知乎 编辑:程序博客网 时间:2024/05/20 04:11
 进度条是构建良好的用户界面必备的组件之一,下面总结一下在基于 Eclipse RCP 开发应用程序时显示进度条的几种方法 :
  • 使用 ProgressMonitorDialog 对话框

ProgressMonitorDialog 是用于显示进度条的对话框,它必须配合接口 IrunnableWithProgress 进行使 用,        IRunnableWithProgress 定义了一个可监控进度的任务对象 , 针对具体的业务逻辑实现其 run(IProgressMonitor monitor) 方法即可,整个的用法如下代码所示:

view plaincopy to clipboardprint?
  1. ProgressMonitorDialog pmd = new ProgressMonitorDialog(window.getShell());  
  2. IRunnableWithProgress rwp = new IRunnableWithProgress() {  
  3.     @Override  
  4.     public void run(IProgressMonitor monitor){  
  5.           //totalWork为IProgressMonitor.UNKNOWN时表示不知道任务的总量   
  6.           //将在进度条上显示一个来回移动的进度条   
  7.           monitor.beginTask("任务1" + "", IProgressMonitor.UNKNOWN);  
  8.           //TODO 相应的业务逻辑   
  9.           monitor.done();  
  10.         }  
  11. }  
  12. pmd.run(true, false, rwp);  

方法 run(boolean fork,boolean canceled,IrunnableWithProgress p) 中,第一个参数 fork 表示是否在事件队列(即 UI 线程)中运行,如果设置为 false, 表示将在事件队列中运行,第二个参数 canceled 表示任务是否能够被取消。

执行 pmd.run(false, false, rwp) 时的进度条显示:


  • 使用 RCP 平台的进度条服务 IProgressService ;

IProgressService 是 RCP 提供给客户程序执行一个耗时任务的方便快捷的方法,具体用法如下

1)执行非UI的操作时

view plaincopy to clipboardprint?
  1. IProgressService progressService = PlatformUI.getWorkbench().getProgressService();    
  2.     progressService.busyCursorWhile(new IRunnableWithProgress(){    
  3.        public void run(IProgressMonitor monitor) {    
  4.           // 非UI线程,只能进行非UI的操作     
  5.        }    
  6.     });  


2)执行UI的操作时

view plaincopy to clipboardprint?
  1. progressService.runInUI(    
  2.       PlatformUI.getWorkbench().getProgressService(),    
  3.        new IRunnableWithProgress() {    
  4.           public void run(IProgressMonitor monitor) {    
  5.              // UI主线程,可进行UI操作     
  6.           }    
  7.        },    
  8.        Platform.getWorkspace().getRoot());  
  • 使用 Job 完成耗时任务将会自动显示一个进度条

Job 默认支持进度条的显示,启动一个Job时会自动打开一个进度条,如果Job调用了方法setUser(true),将会弹出一个进度条对话框表示是用户作业,如果setUser(true),则表示作业在后台运行,进度条将在进度条视图中运行。

  • 在向导中实现进度条,调用方法如下:

IWizard w;
w.getContainer().run(fork, cancelable, runnable);

以上代码表示在当前向导页上运行一个可监控进度的任务;