Java 如何使用自定义启动配置捕获Eclipse插件的控制台输出?
我正在编写一个带有自定义启动配置的Eclipse插件,即Java 如何使用自定义启动配置捕获Eclipse插件的控制台输出?,java,eclipse,eclipse-plugin,console,Java,Eclipse,Eclipse Plugin,Console,我正在编写一个带有自定义启动配置的Eclipse插件,即LaunchConfigurationDelegate子类中的launch()方法。这个方法实际上只是调用Runtime.exec(),但是当我从launch()中写入System.out时,它会转到正在调试插件的Eclipse实例的控制台,而不是插件实例本身的控制台。我已经分析了该方法的ILaunchConfiguration和ILaunch参数,但找不到它们指定我可以写入的任何输出/错误流的任何地方 正如教程中推荐的,我有两个单独的插件
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中
希望这对某人有帮助。。如果有人对最后一个问题有什么意见(或者对我的方法有什么意见),请发表评论