Hintergrund: Ich erstelle ein Plug-in, das einen anderen Plug-in-Befehl auslöst. Dieser Befehl führt eine Überprüfung durch (Hintergrundprozess) und implementiert Markierungen für bestimmte Programme.Warten auf den Job im Arbeitsbereich zu beenden
Problem: Ich habe erfolgreich den Befehl programmgesteuert ausgelöst, aber ich muss warten, bis es fertig ist, denn wenn ich nicht warten, werde ich nur NULL Satz von Markern [] erhalten.
Bisher ist hier, was ich habe
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));
}
ich versucht habe, die Umsetzung dieses
ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
}
}, new NullProgressMonitor());
wie hier erklärt: https://dzone.com/articles/eclipse-gui-testing-is-viable-
- Anstatt sleep() zu verwenden, um auf etwas zu warten, warten Sie, bis die eigentliche Aufgabe erledigt ist. Bei einer stark belasteten Maschine können die Verarbeitungszeiten variieren. Anstatt einen zerbrechlichen Schlaf (500L) zu haben, verwenden Sie eine zuverlässige Technik, um festzustellen, wann der Job wirklich erledigt ist.
Zum Beispiel, wenn Sie wissen, dass Ihre Bearbeitung eine Ressource Sperre hält, senden Sie uns eine no-op leeren Arbeitsbereich Job und warten auf sie in Ihrem Test. Es wird nur einmal alle anderen Ressourcensperren aufgerufen werden freigegeben sind, so dass, wenn es fertig ist sind Sie garantiert, dass Ihre anderen Job
getan wird
Aber ich denke, ich es falsch bin der Umsetzung, da sie nicht für die nicht warten Hintergrundjobs zum Abschluss.
Alle Ratschläge, was zu tun ist, werden definitiv helfen!
Edit: Um hinzuzufügen, ist der Job/Task/Prozess, der ausgeführt wurde, von einem anderen Plug-in, das ich nicht kenne. Daher kenne ich die Jobgruppe nicht. Alles worauf ich vertraue, ist, auf die Aufgabe zu warten.
Hallo. Vielen Dank! Dadurch wird jedoch die gesamte Eclipse-Workbench eingefroren, da sie auf demselben Thread ausgeführt wird. Ich kann es nicht in Async schreiben, da es nicht darauf wartet, dass die Hintergrundprozesse beendet werden. –