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

Java 如何使用自定义启动配置捕获Eclipse插件的控制台输出?,java,eclipse,eclipse-plugin,console,Java,Eclipse,Eclipse Plugin,Console,我正在编写一个带有自定义启动配置的Eclipse插件,即LaunchConfigurationDelegate子类中的launch()方法。这个方法实际上只是调用Runtime.exec(),但是当我从launch()中写入System.out时,它会转到正在调试插件的Eclipse实例的控制台,而不是插件实例本身的控制台。我已经分析了该方法的ILaunchConfiguration和ILaunch参数,但找不到它们指定我可以写入的任何输出/错误流的任何地方 正如教程中推荐的,我有两个单独的插件

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

正如教程中推荐的,我有两个单独的插件一起运行;一个处理UI内容(
LaunchConfigurationTab
LaunchConfigurationTabGroup
LaunchShortcut
),另一个包含
LaunchConfigurationDelegate
本身

我在我的UI插件中使用创建了一个控制台,我可以在UI代码中很好地编写它。但我不知道如何将非UI插件中生成的输出定向到UI插件中创建的控制台

我读过和,但它们没有指定如何“获取”在
launch()
方法中首先生成的输出


任何指点都非常受欢迎,我被卡住了

我终于做到了以下几点:

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));
}
在我的
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中

希望这对某人有帮助。。如果有人对最后一个问题有什么意见(或者对我的方法有什么意见),请发表评论