[英]How to properly end Eclipse launch configuration execution?
我正在编写一个Eclipse插件,它提供了一个新的启动配置类型。 完全可以预期,当完成此新类型的启动配置的执行时,启动配置按钮工具提示仍指示我的配置正在运行。
当我想使用启动组启动多个此类配置时,这会导致问题,第二个配置无限期地等待第一个配置完成(我使用启动组的等待直到终止选项)。 所以我想我错过了告诉平台启动配置执行完成的事情。
如果我没记错的话,你需要在启动启动配置时启动一个新的系统Process
( ILaunchConfigurationDelegate#launch
),然后为这个Process
创建一个RuntimeProcess
。 然后, RuntimeProcess
将生成必要的DebugEvents
并在终止时通知相应的ILaunch
。
您通常会通过调用DebugPlugin#newProcess(ILaunch, Process, String)
来创建RuntimeProcess
,但也可以直接实例化它(例如,如果您想扩展RuntimeProcess
类)。
通过查看示例启动配置(主要是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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.