如何使用自定义启动配置捕获Eclipse插件的控制台输出?

时间:2011-09-27 17:23:53

标签: java eclipse eclipse-plugin console

我正在编写一个带有自定义启动配置的Eclipse插件,即launch()子类中的LaunchConfigurationDelegate方法。这个方法基本上只调用Runtime.exec(),但是当我从launch()内部写入System.out时,它会进入调试插件的Eclipse实例的控制台,而不是插件实例的控制台。本身。我已经分析了该方法的ILaunchConfigurationILaunch参数,但无法在任何地方找到它们可以写入的任何输出/错误流。

正如教程中推荐的那样,我有两个独立的插件一起运行;一个处理UI内容(LaunchConfigurationTabLaunchConfigurationTabGroupLaunchShortcut,),另一个包含LaunchConfigurationDelegate本身。

我使用this code在我的UI插件中创建了一个控制台,我可以在UI代码中写得很好。但我无法弄清楚如何将我的非UI插件中生成的输出定向到我的UI插件中创建的控制台。

我已阅读this postthis one,但他们没有指定如何“获取”首先在launch()方法中生成的输出。< / p>

任何指针都会非常受欢迎,我被困住了!

1 个答案:

答案 0 :(得分:2)

好吧,我终于设法得到了如下工作:

在我的LaunchConfigurationDelegate中,我介绍了以下静态方法:

public static void setConsole(PrintStream ps) {
    System.setOut(ps);
    System.setErr(ps);
}

然后在我的UI插件PerspectiveFactory中创建我的控制台时,我按如下方式调用它:

private void createConsole() {
    console = new MessageConsole("My Console", null);
    console.activate();
    ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{ console });
    MessageConsoleStream stream = console.newMessageStream();

    MyLaunchConfigurationDelegate.setConsole(new PrintStream(stream));
}

这是有效的,除非每次关闭Eclipse并重新启动它时控制台都会消失。但是,当我重置我的视角时,控制台会再次出现。显然我需要在启动时调用代码,而不是在PerspectiveFactory本身。

希望这可以帮助某人......如果有人对这最后一个问题(或者我的方法一般)有一些意见,请做评论!