0

我在使用 Job API 实现的 eclipse RCP (e4) 应用程序中有一些长时间运行的任务。作业立即启动(在显示 GUI 之前)。

private class MyJob extends Job {

@Override
protected IStatus run(IProgressMonitor monitor) {
    monitor.beginTask("do some long stuff", 4);

    doStep1();
    monitor.worked(1);
    doStep2();
    monitor.worked(1);
    doStep3();
    monitor.done();
}
// methods for the steps follow here
}

现在我想在我的 GUI 中的某处显示一个进度条,以显示 MyJob 是否仍在运行。

我已经使用 IJobManager 进行了尝试:

public class MyStatusbar {
private ProgressBar progressBar;

@Inject
UISynchronize sync;

@PostConstruct
public void createControls(Composite parent) {
    progressBar = new ProgressBar(parent, SWT.SMOOTH);
    progressBar.setBounds(100, 10, 200, 20);

    // Setting the progress monitor
    IJobManager manager = Job.getJobManager();

    final IProgressMonitor p = (IProgressMonitor) new IProgressMonitor() {

        @Override
        public void worked(final int work) {
            sync.syncExec(new Runnable() {
                @Override
                public void run() {
                    System.out.println("Worked");
                    progressBar.setSelection(progressBar.getSelection()
                            + work);
                }
            });
        }

        // [...]
    };
    ProgressProvider provider = new ProgressProvider() {
        @Override
        public IProgressMonitor createMonitor(Job job) {
            return p;
        }
    };

    manager.setProgressProvider(provider);
}
}

但是我的工作没有显示在状态栏中。我想这与我在 GUI 出现之前开始工作有关,但我不确定。

所以我有两个问题:

  1. 我究竟做错了什么?
  2. 我的方法是正确的还是有更好的方法来做到这一点?
4

1 回答 1

2

您确实需要IJobManager.setProgressProvider在开始之前创建进度监视器并调用JobProgressProvider.createMonitor即被调用的时间)。

我在班级的@PostContextCreate方法中设置了我的进度提供程序。LifeCycle

于 2013-09-24T15:19:59.187 回答