2013-09-24 38 views
0

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

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. 我的方法是正确的还是有更好的方法来做到这一点?

回答

2

您确实需要创建一个进度监视器,并呼吁IJobManager.setProgressProviderJob开始之前(也就是当ProgressProvider.createMonitor被调用)。

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

相关问题