对于在另一个Eclipse作业上安排和加入的Eclipse作业使用进度监视器的正确方法是什么?我希望子任务与主要任务相关联。
理想情况下,我希望能够告诉子任务使用从主监视器创建的SubProgressMonitor
运行,但是我没有看到这样做的方法。我查看了Job.setProgressGroup(..., ...)
方法,但文档指出应该使用IJobManager.createProgressGroup()
创建组。
以下是上下文的代码段:
@Override
protected IStatus run(final IProgressMonitor monitor) {
try {
monitor.beginTask("My Job A", 100);
MyJobB subtask = new MyJobB();
// how how should subtask's progress be tracked?
subtask.schedule();
subtask.join();
return Status.OK_STATUS;
} catch (Exception ex) {
// return error status
} finally {
monitor.done();
}
}
答案 0 :(得分:6)
要回答原始问题 - 您可以这样做:
public class MyJobA extends Job {
private IProgressMonitor pGroup = Job.getJobManager().createProgressGroup();
public MyJobA() {
super("My Job A");
setProgressGroup(pGroup, 50);
}
@Override
protected IStatus run(IProgressMonitor monitor) {
MyJobB subtask = new MyJobB();
subtask.setProgressGroup(pGroup, 50);
pGroup.beginTask("My Jobs", 100);
try {
monitor.beginTask("My Job A", 10);
try {
// do work
monitor.worked(...);
} finally {
monitor.done();
}
subtask.schedule();
subtask.join();
} finally {
pGroup.done();
}
return Status.OK_STATUS;
}
}
如果你在外部创建进度组,那就更优雅了:
IProgressMonitor group = Job.getJobManager().createProgressGroup();
try {
group.beginTask("My Tasks", 200);
MyJobB b = new MyJobB();
b.setProgressGroup(group, 100);
b.schedule();
MyJobC c = new MyJobC();
c.setProgressGroup(group, 100);
c.schedule();
b.join();
c.join();
} finally {
group.done();
}
请注意,尚未安排的作业将显示为“已完成”:
如果可能,我会考虑合并两个作业并使用SubMonitor。