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接口,但是所有的方法都是给的空实现,传递此类就避免了被调用方法没有进行空指针判断而造成的麻烦。
=====
.....