【问题标题】:How to set worked precisely in IProgressMonitor in Eclipse plugin?如何在 Eclipse 插件中的 IProgressMonitor 中精确设置?
【发布时间】:2014-02-25 17:12:41
【问题描述】:

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);
    }

}

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-rcp progressmonitor


    【解决方案1】:

    我还没有看到一个好的解决方案,您可以执行以下操作之一:

    如果可能,请进行某种快速扫描以计算出总数。

    您可以将IProgressMonitor.UNKNOWN 指定为beginTask 上的值,这将为您提供一个不同的进度条,仅显示正在发生的事情。

    只是猜测一个值!可能会得到大于总工作值的东西。

    如果作品可以分成几部分,请为每部分使用SubProgressMonitor,并为每个部分指定合理的作品数量:

     monitor.beginTask("task", 2 * 1000);
    
     work1(new SubProgressMonitor(monitor, 1000));
    
     work2(new SubProgressMonitor(monitor, 1000));
    

    【讨论】:

    • 谢谢。 Eclipse 4 更好吗?
    • Eclipse 4 没有变化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多