异步作业调度

IProgressMonitor:通过这个接口控制进度条的现实

ProgressMonitorDialog:进度对话框

IRunnableWithProgress和java的标准接口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=10000;

      monitor.beginTask("Start...",ticks);

      try{

          for(int i=0;i<ticks;i++){

               if(monitor.isCanceled()){

                  throw new InterruptedException();

               }

              monitor.worked(1);

          }finally{

            monitor.done();

         }

      }

    }

});

===========================================
除了ProgressMonitorDialog外,在Eclipse中还可以通过其他方式显示进度,比如IWorkbenchWindow 通过在工作台窗口的状态行中显示进度来实现此界面,WizardDialog在向导状态行中显示长时间运行的操作。
============================================
除了自己构造进度对话框显示进度以外,我们可以调用平台的进度服务,而Eclipse也推荐使用平台的进度服务,这将使得所有的插件都有一致的进度表示。平台的进度服务定义为接口IProgressService,可以通过PlatformUI.getWorkbench().getProgressService方法来调用系统的进度服务,如下:

IProgressService progressService =PlatformUI.getWorkbench().getProgressService();

progressService.busyCursorWhile(new IRunnableWithProgress(){

   pulbic void run(IProgressMonitor monitor){

   //....

   }

});

==================================
在调用Eclipse的方法或者第三方插件的一些方法的时候,有的方法要求传递一个实现了IProgressMonitor的实例进去,如果我们无法传递或者无需传递的时候,最好不要传递null值进去,而是要传递NullProgressMonitor的一个实例进去,此类位于org.eclipse.core.runtime包下,它实现了IProgressMonitor接口,但是所有的方法都是给的空实现,传递此类就避免了被调用方法没有进行空指针判断而造成的麻烦。
=====
.....

猜你喜欢

转载自niub.iteye.com/blog/1787613
今日推荐