0

我正在学习如何开发 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;
}

但我不断收到以下错误:

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

我尝试遵循本文中发布的建议(http://waheedtechblog.blogspot.com/2011/11/javalangillegalstateexception-workbench.html),但无济于事。

我的问题如下:

  1. 应该怎么做才能解决上述错误?

  2. 鉴于 Eclipse 开发环境的丰富性,是否有更好的方法可以用更少的编程工作来实现相同的目标(例如,在 RCP 应用程序中切换控制台的视图)?

4

1 回答 1

0

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

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

<extension id="product" point="org.eclipse.core.runtime.products"> 
  <product application="org.eclipse.ui.ide.workbench" name="name"/>
  ...

或者你可以打电话

PlatformUI.createAndRunWorkbench(display, advisor);

在您的IApplication实施中,但您必须至少完成一些工作org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor才能使事情正常工作。

于 2013-10-24T09:30:49.557 回答