Eclipse rcp 在EclipseKepler(RCP)中创建控制台视图

Eclipse rcp 在EclipseKepler(RCP)中创建控制台视图,eclipse-rcp,Eclipse Rcp,我正在学习如何开发RCP应用程序。我需要做的任务之一是创建一个控制台视图。我进行了一些搜索,发现了以下代码段,据推测它创建了一个控制台视图: @PostConstruct public void createComposite(Composite parent) { MessageConsole myConsole = findConsole("abc");// CONSOLE_NAME); MessageConsoleStream out = myConsole.newMess

我正在学习如何开发RCP应用程序。我需要做的任务之一是创建一个控制台视图。我进行了一些搜索,发现了以下代码段,据推测它创建了一个控制台视图:

@PostConstruct
public void createComposite(Composite parent) {
    MessageConsole myConsole = findConsole("abc");// CONSOLE_NAME);
    MessageConsoleStream out = myConsole.newMessageStream();
    out.println("Hello from Generic console sample action");

    IWorkbench wb = PlatformUI.getWorkbench();
    IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
    IWorkbenchPage page = win.getActivePage();
    String id = IConsoleConstants.ID_CONSOLE_VIEW;
    IConsoleView view = null;
    try {
        view = (IConsoleView) page.showView(id);
    } catch (PartInitException e) {
        e.printStackTrace();
    }
    view.display(myConsole);
}

private MessageConsole findConsole(String name) {
    ConsolePlugin plugin = ConsolePlugin.getDefault();
    IConsoleManager conMan = plugin.getConsoleManager();
    IConsole[] existing = conMan.getConsoles();
    for (int i = 0; i < existing.length; i++)
        if (name.equals(existing[i].getName()))
            return (MessageConsole) existing[i];
    // no console found, so create a new one
    MessageConsole myConsole = new MessageConsole(name, null);
    conMan.addConsoles(new IConsole[] { myConsole });
    return myConsole;
}
@PostConstruct
public void createComposite(复合父级){
MessageConsole myConsole=findConsole(“abc”);//控制台名称);
MessageConsoleStream out=myConsole.newMessageStream();
println(“来自通用控制台示例操作的Hello”);
IWorkbench wb=PlatformUI.getWorkbench();
IWorkbenchWindow win=wb.getActiveWorkbenchWindow();
IWorkbenchPage=win.getActivePage();
字符串id=IConsoleConstants.id\u控制台\u视图;
IConsoleView视图=空;
试一试{
视图=(IConsoleView)页面。显示视图(id);
}捕获(PartInite异常){
e、 printStackTrace();
}
查看.显示(myConsole);
}
private MessageConsole findConsole(字符串名称){
ConsolePlugin plugin=ConsolePlugin.getDefault();
IConsoleManager conMan=plugin.getConsoleManager();
IConsole[]existing=conMan.getConsoles();
for(int i=0;i
但我一直得到以下错误:

org.eclipse.e4.core.di.InjectionException:java.lang.IllegalStateException:Workbench尚未创建。

我试图遵循本文()中的建议,但没有效果

我的问题如下:

  • 为了修复上述错误,应该做些什么

  • 考虑到Eclipse开发环境的丰富性,有没有更好的方法可以用更少的编程工作(例如)来实现同样的事情


  • 如果希望在RCP中运行现有的Eclipse工作台代码,则需要在应用程序中正确地设置工作台

    您可以基于现有的
    org.eclipse.ui.ide.workbench
    应用程序定义产品:

    
    ...
    
    或者你可以打电话

    PlatformUI.createAndRunWorkbench(display,advisor);
    

    在您的
    iaapplication
    实现中,但您必须至少完成
    org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor
    所做的部分工作,才能使事情正常工作。

    您在哪里包含所有这些代码?从错误中,你可以看出它不是应该在的地方。你在用e4吗?顺便说一句,你应该试试其他教程。例如:你能详细介绍一下第一个解决方案吗?同样基于以下引语(摘自“java.lang.IllegalStateException:Workbench尚未创建”,这本质上是一个竞争条件,可以通过表达对该捆绑包的显式依赖或将该捆绑包提升到比工作台更高的启动级别来解决。”,我的RCP是Eclipse4应用程序。提前谢谢。看一下:这是plugin.xml文件。但我还是犯了同样的错误?谢谢您plugin.xml指定Eclipse4应用程序-这不支持工作台或控制台。如果您想要这些,您必须使用老式的
    org.eclipse.ui.ide.workbench
    应用程序。因此,您知道描述如何为Eclipse4应用程序提供控制台视图的任何指针或链接吗?谢谢你的帮助!