2014-12-27 11 views
10

Ich schreibe ein Eclipse-Plugin, das einen neuen Startkonfigurationstyp beisteuert. Es funktioniert perfekt erwartet, dass, wenn die Ausführung einer Startkonfiguration für diesen neuen Typ abgeschlossen ist, der Tooltip der Startkonfigurationsschaltfläche weiterhin anzeigt, dass meine Konfiguration ausgeführt wird.Wie wird die Ausführung der Eclipse-Startkonfiguration ordnungsgemäß beendet?

Dies führt zu Problemen, wenn ich mehrere solcher Konfigurationen über Startgruppen starten möchte. Die zweite Konfiguration wartet unendlich bis zum Abschluss der ersten Konfiguration (ich verwende die Option "Warten bis zur Beendigung" der Startgruppe). Also ich vermisse etwas, um der Plattform zu sagen, dass die Ausführung der Startkonfiguration abgeschlossen ist.

+0

Haben Sie einen IProgressMonitor, um den Start zu melden? monitor.done() –

Antwort

1

Wenn ich mich richtig erinnere, müssen Sie Starten Sie ein neues System Process, wenn Ihre Startkonfiguration gestartet wird (ILaunchConfigurationDelegate#launch) und erstellen Sie dann RuntimeProcess für dieses Process. Die RuntimeProcess wird dann die erforderliche DebugEvents generieren und die entsprechende ILaunch benachrichtigen, wenn es beendet wurde.

Sie werden in der Regel die RuntimeProcess erstellen, indem DebugPlugin#newProcess(ILaunch, Process, String) Aufruf, aber es ist auch möglich, sie direkt zu instanziieren (zum Beispiel, wenn Sie die Klasse RuntimeProcess erweitern möchten).

+0

Sie sind richtig. Ich habe diese Antwort endlich akzeptiert, aber dank Manouti hat es mir geholfen, es selbst zu finden. –

2

Wenn Sie sich Beispiel-Startkonfigurationen ansehen (hauptsächlich die vom Ant-Plugin), gibt es eine org.eclipse.debug.core.model.ITerminate-Schnittstelle, die in den Prozess-/Debug-Zielen implementiert ist, die beim Start ausgeführt werden.

A org.eclipse.debug.core.IDebugEventSetListener registriert beenden Ereignisse zu behandeln, die durch den Aufruf der folgenden Anweisung ausgelöst werden:

DebugPlugin.getDefault().fireDebugEventSet(
        new DebugEvent[] {new DebugEvent(this, DebugEvent.TERMINATE)}); 

Beispielcode aus der AntLaunchDelegate Klasse:

final boolean[] terminated = new boolean[1]; 
terminated[0] = launch.isTerminated(); 
IDebugEventSetListener listener = new IDebugEventSetListener() { 
    public void handleDebugEvents(DebugEvent[] events) { 
     for (int i = 0; i < events.length; i++) { 
      DebugEvent event = events[i]; 
      for (int j = 0, numProcesses = processes.length; j < numProcesses; j++) { 
       if (event.getSource() == processes[j] 
         && event.getKind() == DebugEvent.TERMINATE) { 
        terminated[0] = true; 
        break; 
       } 
      } 
     } 
    } 
}; 
DebugPlugin.getDefault().addDebugEventListener(listener); 
monitor 
     .subTask(AntLaunchConfigurationMessages.AntLaunchDelegate_28); 
while (!monitor.isCanceled() && !terminated[0]) { 
    try { 
     Thread.sleep(50); 
    } catch (InterruptedException e) { 
    } 
} 
DebugPlugin.getDefault().removeDebugEventListener(listener); 
+0

Vielen Dank für Ihre Hilfe, aber ich bin mir nicht sicher, Ihre Antwort zu verstehen. Dieser Listener wird verwendet, um zu wissen, wann die Startkonfiguration beendet werden soll. In meinem Fall weiß ich genau, was zu tun ist, und mein Problem ist, dass es am Ende meines Startkonfigurationscodes immer noch läuft. –

+0

Mein Ausgangspunkt war die Suche nach dem Text "läuft schon" im Eclipse-Code (ich nehme an, dies ist die Nachricht, die die QuickInfo anzeigt) und es führt mich zu der Klasse 'LaunchingResourceManager' wo ich sehen kann, dass der Text ist hinzugefügt in der 'appendLaunched'-Methode. Um zu prüfen, ob es bereits einen Start gibt, ruft es ILaunch [] launches = DebugPlugin.getDefault(). GetLaunchManager(). GetLaunches(); 'auf und prüft, ob' ILaunch' nicht beendet wird. Daher könnte das Problem sein, dass immer noch ein "ILaunch" vorhanden ist, der nicht beendet und im LaunchManager registriert ist. – manouti

+0

Danke, ich verstehe jetzt. Aber mein Problem ist, warum mein "Start" nicht beendet wird? –

Verwandte Themen