背景: 我正在创建一个插件来触发另一个插件的命令。该命令执行检查(后台进程)并在特定程序上实现标记。等待工作区作业完成
问题: 我已经成功地以编程方式触发了命令,但是我需要等待它完成,因为如果我不等,我只会得到NULL集合的标记[]。
到目前为止,这里是我
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IResource resource = workspace.getRoot();
resource.deleteMarkers(null, true, 0);
markers = resource.findMarkers(IMarker.MARKER, true, IResource.DEPTH_INFINITE);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_F2);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_SHIFT);
robot.keyRelease(KeyEvent.VK_F2);
//...command is executed, now running background process
//...wait for all background process to finish
for (IMarker m : markers) {
System.out.println("Id: " + m.getId());
System.out.println("Message: " + m.getAttribute(IMarker.MESSAGE));
System.out.println("Line Number: " + m.getAttribute(IMarker.LINE_NUMBER));
}
我曾尝试实施这一
ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
}
}, new NullProgressMonitor());
从这里解释:https://dzone.com/articles/eclipse-gui-testing-is-viable-
- 而不是使用睡眠()等待要完成的事情,等待真正的事情完成。重负荷的机器可能导致处理时间发生变化。而不是有一个脆弱的睡眠(500L),使用可靠的技术来确定什么时候工作真的完成。
例如,如果你知道你的处理是持有资源 锁,后无操作空的工作区工作,并在其上等待您的 测试中。它只会被调用一次,其他所有资源锁是 发布,所以它的完成时,你保证,你的其他工作 完成
但我想我错实现它,因为它不等待后台工作完成。
任何有关做什么的建议一定会有所帮助!
编辑:为了补充,执行的作业/任务/过程来自我不知道的另一个插件。因此,我不知道工作组等,我所依靠的是等待任务完成。
嗨。谢谢!但是,这会冻结整个Eclipse工作台,因为它在同一个线程上运行。我不能把它放在异步,因为它不会等待后台进程完成。 –