背景: 我正在創建一個插件來觸發另一個插件的命令。該命令執行檢查(後臺進程)並在特定程序上實現標記。等待工作區作業完成
問題: 我已經成功地以編程方式觸發了命令,但是我需要等待它完成,因爲如果我不等,我只會得到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工作臺,因爲它在同一個線程上運行。我不能把它放在異步,因爲它不會等待後臺進程完成。 –