——此文章摘自《自己动手写开发工具
基于Eclipse的工具开发》定价
¥
特价
¥
详细>>http://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);
dialogrun(true true new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException InterruptedException
{
final int ticks = ;
monitorbeginTask(开始操作 ticks);
try
{
for (int i = ; i < ticks; i++)
{
if (monitorisCanceled())
throw new InterruptedException();
monitorworked();
}
} finally
{
monitordone();
}
}
});
调用beginTask方法来完成任务ticks 参数表示此任务有多少工作量调用worked方法报告自上次报告以来当前完成的任务数量在循环中不断通过isCanceled方法判断当前任务是否被用户取消需要注意要在finally中调用done方法完成任务否则会出现进度对话框无法正常关闭的情况
除了ProgressMonitorDialog外在Eclipse中还可以通过其他方式显示进度比如IWorkbenchWindow 通过在工作台窗口的状态行中显示进度来实现此界面WizardDialog在向导状态行中显示长时间运行的操作
除了可以自己构造进度对话框来显示进度之外我们还可以调用平台的进度服务而且Eclipse也推荐使用平台的进度服务这样可以使所有插件都将具有一致的进度表示平台的进度服务定义为接口IProgressService我们可以通过PlatformUIgetWorkbench() getProgressService方法来调用系统的进度服务例如
IProgressService progressService = PlatformUIgetWorkbench()
getProgressService();
progressServicebusyCursorWhile(new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
{
//执行耗时的操作
}
});
在调用Eclipse的方法或者第三方插件的一些方法的时候有的方法要求传递一个实现了IProgressMonitor的实例进去如果我们无法传递或者无需传递的时候最好不要传递null值进去而是要传递NullProgressMonitor的一个实例进去此类位于orgeclipsecoreruntime包下它实现了 IProgressMonitor接口但是所有方法都是给的空实现传递此类就避免了被调用方法没有进行空指针判断而造成的麻烦
right>[http://developcsaicn/Java_Eclipse/htm>] []