等待工作区作业完成

时间:2016-12-01 04:49:03

标签: java eclipse eclipse-plugin

背景: 我正在创建一个插件,触发另一个插件的命令。此命令执行检查(后台进程)并在特定程序上实现标记。

问题: 我已经成功地以编程方式触发了命令,但是我需要等待它完成,因为如果我不等待,我将只获得NULL标记集[]。

到目前为止,这就是我所拥有的

{{1}}

我试过实现这个

{{1}}

如此处所述:https://dzone.com/articles/eclipse-gui-testing-is-viable-

  
      
  1. 不要使用sleep()等待某些事情要做,而是等待真实的事情完成。负载很重的机器可能会导致   处理时间有所不同。使用,而不是脆弱的睡眠(500L)   确定工作何时完成的可靠技术。
  2.         

    例如,如果您知道您的处理是持有资源   锁定,发布no-op空工作区作业并在其中等待   测试。只有在所有其他资源锁定之后才会调用它   已经发布,所以当它完成后,你就可以保证你的另一份工作   已完成

但我想我正在错误地实施它,因为它不会等待后台工作完成。

任何有关做什么的建议肯定会有所帮助!

编辑:要添加,执行的作业/任务/进程来自另一个我不知道的插件。因此,我不知道工作组等等。我所依赖的是等待任务完成。

2 个答案:

答案 0 :(得分:0)

我不确定但您可以尝试使用 IJobManager

private void waitJobsComplete() {
  final IJobManager manager = Job.getJobManager();
  final Job[] jobs = manager.find(null); //return all jobs
  while(jobExists(jobs)) {
    sleep(50);
  }
}
private boolean jobExists(Job[] jobs) {
   for(Job job: jobs) {
     if(job.getState() != Job.NONE) {
      return true;
     }
   }
   return false;
}

答案 1 :(得分:0)

您引用的文章是WorkspaceJob,您可以使用以下内容执行建议:

Job job = new WorkspaceJob("name")
{
  @Override
  public IStatus runInWorkspace(IProgressMonitor monitor)
    throws CoreException
  {
    return Status.OK_STATUS;
  }
};

job.schedule();

try
 {
   job.join();
 }
catch (InterruptedException e)
 {
   //
 }