gpt4 book ai didi

java - 如何在 Eclipse 插件中的 IProgressMonitor 中设置精确工作?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:41 25 4
gpt4 key购买 nike

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

}

最佳答案

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

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

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

猜一个值!可能会得到比总工作值(value)更大的东西。

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

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

work1(new SubProgressMonitor(monitor, 1000));

work2(new SubProgressMonitor(monitor, 1000));

关于java - 如何在 Eclipse 插件中的 IProgressMonitor 中设置精确工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com