我正在编写一个Eclipse插件,它提供了一个新的启动配置类型。完全可以预期,当完成此新类型的启动配置的执行时,启动配置按钮工具提示仍指示我的配置正在运行。
当我想使用启动组启动多个此类配置时,这会导致问题,第二个配置无限期地等待第一个配置完成(我使用启动组的等待直到终止选项)。所以我想我错过了告诉平台启动配置执行完成的事情。
答案 0 :(得分:3)
如果我没记错的话,您需要在启动启动配置(Process
)时启动新系统ILaunchConfigurationDelegate#launch
,然后为此Process
创建RuntimeProcess
。然后,RuntimeProcess
会生成必要的DebugEvents
,并在终止时通知相应的ILaunch
。
您通常会通过调用DebugPlugin#newProcess(ILaunch, Process, String)
来创建RuntimeProcess
,但也可以直接对其进行实例化(例如,如果您想扩展类RuntimeProcess
)。
答案 1 :(得分:2)
通过查看示例启动配置(主要是Ant插件提供的配置),有一个org.eclipse.debug.core.model.ITerminate
接口,在启动时执行的进程/调试目标中实现。
注册org.eclipse.debug.core.IDebugEventSetListener
以处理通过调用以下语句触发的终止事件:
DebugPlugin.getDefault().fireDebugEventSet(
new DebugEvent[] {new DebugEvent(this, DebugEvent.TERMINATE)});
AntLaunchDelegate
类的示例代码:
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);