1

このメソッド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);
    }

}
4

1 に答える 1

1

私はこれに対する良い解決策を見たことがありません.次のいずれかを行うことができます:

可能であれば、何らかのクイック スキャンを実行して合計を計算します。

IProgressMonitor.UNKNOWNon の値として指定できますbeginTask。これにより、何かが起こっていることを示す別の進行状況バーが表示されます。

値を推測するだけです!おそらく、総作業値よりも大きな何かが得られる可能性があります。

作業をいくつかの部分に分割できる場合は、各部分に使用SubProgressMonitorし、各部分に適切な作業数を指定します。

 monitor.beginTask("task", 2 * 1000);

 work1(new SubProgressMonitor(monitor, 1000));

 work2(new SubProgressMonitor(monitor, 1000));
于 2014-02-25T17:50:45.353 に答える