我在使用 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 出现之前开始工作有关,但我不确定。
所以我有两个问题:
- 我究竟做错了什么?
- 我的方法是正确的还是有更好的方法来做到这一点?