我通过使用以下代码扩展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());
有什么建议吗?
答案 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();