方法org.eclipse.core.runtime.IProgressMonitor.worked(int)
接收整数,表示递增。这意味着,唯一可用的单位是自然单位。例如,它不能是百分比。
所以,如果我处理作业中的一些文件,我就无法报告计数阶段,因为我应该调用的第一种方法是org.eclipse.core.runtime.IProgressMonitor.beginTask(String, int)
,这需要我知道总量。
如何完成?
更新
我在下面写了一个包装器,但这看起来很荒谬:
public class ProgressMonitorDoubleWrapper implements IProgressMonitor {
private IProgressMonitor delegate;
private int currentWork, totalWork;
private double currentWorkDouble;
public ProgressMonitorDoubleWrapper(IProgressMonitor monitor) {
this.delegate = monitor;
}
@Override
public void beginTask(String name, int totalWork) {
beginTask(name, (double) totalWork);
}
public void beginTask(String name, double totalWork) {
this.totalWork = (int) totalWork;
currentWork = 0;
currentWorkDouble = 0;
delegate.beginTask(name, this.totalWork);
}
@Override
public void done() {
delegate.done();
}
@Override
public void internalWorked(double work) {
delegate.internalWorked(work);
}
@Override
public boolean isCanceled() {
return delegate.isCanceled();
}
@Override
public void setCanceled(boolean value) {
delegate.setCanceled(value);
}
@Override
public void setTaskName(String name) {
delegate.setTaskName(name);
}
@Override
public void subTask(String name) {
delegate.subTask(name);
}
@Override
public void worked(int work) {
worked((double)work);
}
public void worked(double work) {
currentWorkDouble += work;
int increment = (int)(currentWorkDouble - (double)currentWork);
currentWork += increment;
delegate.worked(increment);
}
}
答案 0 :(得分:1)
我没有看到一个很好的解决方案,你可以做以下其中一个:
如果可能的话,进行某种快速扫描以计算出总数。
您可以将IProgressMonitor.UNKNOWN
指定为beginTask
上的值,这会为您提供一个不同的进度条,只显示正在发生的事情。
猜一个值!可能会得到比总工作价值更大的东西。
如果作品可以分成几部分,则每部分使用SubProgressMonitor
,并为每个部分指定合理的工作计数:
monitor.beginTask("task", 2 * 1000);
work1(new SubProgressMonitor(monitor, 1000));
work2(new SubProgressMonitor(monitor, 1000));