简体   繁体   English

在Eclipse RCP 4应用程序中查找现有作业

[英]Find existing Jobs in an Eclipse RCP 4 application

I have some long running tasks in my eclipse RCP (e4) application that I implemented using the Job API. 我在使用Job API实现的eclipse RCP(e4)应用程序中有一些长时间运行的任务。 The Job is started immediately (before GUI is shown). 作业立即启动(在显示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
}

Now I want to display a progress bar somewhere in my GUI to show if MyJob is still running. 现在我想在GUI中的某个位置显示一个进度条,以显示MyJob是否仍在运行。

I have tried this using the IJobManager: 我使用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);
}
}

But my Job is not shown in the status bar. 但我的工作没有显示在状态栏中。 I suppose it has something to do with my starting the job before the GUI is there but I'm not sure. 我想这与我在GUI出现之前的工作有关,但我不确定。

So I have two questions: 所以我有两个问题:

  1. What am I doing wrong? 我究竟做错了什么?
  2. Is my approach correct or are there better ways to do this? 我的方法是正确的还是有更好的方法来做到这一点?

You do need to create the progress monitor and call IJobManager.setProgressProvider before the Job starts (which is when ProgressProvider.createMonitor is called). 您需要创建进度监视器并在Job开始之前调用IJobManager.setProgressProvider (调用ProgressProvider.createMonitor时)。

I set up my progress provider in the @PostContextCreate method of my LifeCycle class. 我在LifeCycle类的@PostContextCreate方法中设置了我的进度提供程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM