背景: 我正在创建一个插件,触发另一个插件的命令。此命令执行检查(后台进程)并在特定程序上实现标记。
问题: 我已经成功地以编程方式触发了命令,但是我需要等待它完成,因为如果我不等待,我将只获得NULL标记集[]。
到目前为止,这就是我所拥有的
{{1}}
我试过实现这个
{{1}}
如此处所述:https://dzone.com/articles/eclipse-gui-testing-is-viable-
- 不要使用sleep()等待某些事情要做,而是等待真实的事情完成。负载很重的机器可能会导致 处理时间有所不同。使用,而不是脆弱的睡眠(500L) 确定工作何时完成的可靠技术。
醇>例如,如果您知道您的处理是持有资源 锁定,发布no-op空工作区作业并在其中等待 测试。只有在所有其他资源锁定之后才会调用它 已经发布,所以当它完成后,你就可以保证你的另一份工作 已完成
但我想我正在错误地实施它,因为它不会等待后台工作完成。
任何有关做什么的建议肯定会有所帮助!
编辑:要添加,执行的作业/任务/进程来自另一个我不知道的插件。因此,我不知道工作组等等。我所依赖的是等待任务完成。
答案 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)
{
//
}