Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确结束Eclipse启动配置执行?_Java_Eclipse_Eclipse Plugin - Fatal编程技术网

Java 如何正确结束Eclipse启动配置执行?

Java 如何正确结束Eclipse启动配置执行?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我正在编写一个Eclipse插件,提供一种新的启动配置类型。它可以完美地工作,当完成此新类型的启动配置时,启动配置按钮工具提示仍然指示我的配置正在运行 当我想使用启动组启动几个这样的配置时,这会导致问题,第二个配置会无限期地等待第一个配置完成(我使用启动组中的等待直到终止选项)。因此,我想我遗漏了一些东西来告诉平台启动配置的执行已经完成。通过查看示例启动配置(主要是Ant插件提供的配置),在启动中执行的流程/调试目标中实现了一个接口 注册以处理通过调用以下语句触发的终止事件: DebugPlug

我正在编写一个Eclipse插件,提供一种新的启动配置类型。它可以完美地工作,当完成此新类型的启动配置时,启动配置按钮工具提示仍然指示我的配置正在运行


当我想使用启动组启动几个这样的配置时,这会导致问题,第二个配置会无限期地等待第一个配置完成(我使用启动组中的等待直到终止选项)。因此,我想我遗漏了一些东西来告诉平台启动配置的执行已经完成。

通过查看示例启动配置(主要是Ant插件提供的配置),在启动中执行的流程/调试目标中实现了一个接口

注册以处理通过调用以下语句触发的终止事件:

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);
final boolean[]终止=新的boolean[1];
终止[0]=launch.isTerminated();
IDebugEventSetListener=新的IDebugEventSetListener(){
public void handleDebugEvents(DebugEvent[]事件){
for(int i=0;i
如果我没记错的话,您需要在启动配置时启动一个新系统(),然后为此
过程创建一个新系统。
运行时进程
随后将生成必要的消息,并在终止时通知相应的消息


您通常会通过调用来创建
RuntimeProcess
,但也可以直接实例化它(例如,如果您想扩展类
RuntimeProcess
)。

谢谢您的帮助,但我不确定是否理解您的答案。此侦听器用于知道何时终止启动配置。在我的例子中,我确切地知道该做什么,我的问题是,在启动配置代码的末尾,它仍然显示为正在运行。我的出发点是在Eclipse代码中搜索文本“已在运行”(我假设这是工具提示显示的消息)它引导我进入类
LaunchingResourceManager
,在那里我可以看到文本被添加到
appendLaunched
方法中。要检查是否已经有正在运行的启动,它将调用
ILaunch[]launchs=DebugPlugin.getDefault().getLaunchManager().getlaunchs()
并检查是否有
ILaunch
未终止。因此,问题可能是仍有一个
ILaunch
未在launchManager中终止和注册。谢谢,我现在明白你的意思了。但我的问题是为什么我的“启动”没有终止?您是否有IProgressMonitor来通知启动完成?monitor.done()你是对的。我最终接受了这个答案,但多亏了马努蒂,这帮助我自己找到了答案。