EclipseRCP:在自定义控制台中运行系统命令和打印输出

时间:2015-09-01 10:49:18

标签: java eclipse eclipse-plugin eclipse-rcp

我通过使用以下代码扩展IOConsole在eclipse中创建了一个自定义控制台。

IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
IOConsole console = new MyConsole("My Custom Console", null);
consoleManager.addConsoles(new IConsole[] { console });

控制台正在正确创建,我可以在RCP应用程序中显示的控制台列表中查看控制台。

我想运行系统命令,并希望在 REALTIME 中将自定义控制台中的输出关联起来。我写了下面的代码,但似乎没有用。

ConsolePlugin plugin = ConsolePlugin.getDefault();
IConsole[] consoles = plugin.getConsoleManager().getConsoles();
for (IConsole iConsole : consoles) {
    if (iConsole instanceof MyConsole) {
        console = (MyConsole) iConsole;
        break;
    }
}
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("mvn --version");
console.setInputStream(process.getInputStream());

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用单独的Thread

  • 使用OutputStream
  • IOConsole创建新的IOConsole#newOutputStream()
  • 从正在运行的进程InputStream中读取并使用前面提到的outputStream在控制台中写入字节,直到进程退出。

答案 1 :(得分:0)

我知道可能有点太晚了,但最简单的方法是创建一个外部启动配置,设置正确的设置,运行它并在以后删除它。像他一样,控制台会自动更新,你可以取消执行等。 有关详细信息:http://www.integratingstuff.com/2010/11/23/writing-an-eclipse-plugin/

基本上:

ILaunchManager manager = DebugPlugin.getDefault()。getLaunchManager();             ILaunchConfigurationType programType = manager                     .getLaunchConfigurationType(IExternalToolConstants.ID_PROGRAM_LAUNCH_CONFIGURATION_TYPE);

        ILaunchConfiguration cfg = programType.newInstance(null, "YourCommandName");
        ILaunchConfigurationWorkingCopy wc = cfg.getWorkingCopy();
        wc.setAttribute(IExternalToolConstants.ATTR_LOCATION, "${system_path:" + systemCommand+ "}");
        wc.setAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, directoryToStartFrom);
        wc.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, parametersToPass);
        cfg = wc.doSave();
        cfg.launch(ILaunchManager.RUN_MODE, null, false, true);
        cfg.delete();