将自定义控制台添加到 Eclipse 控制台列表

Add custom console to Eclipse console list

基于此 tutorial,我正在创建一个提供新控制台的 Eclipse 插件,该控制台已添加到视图中,我可以在那里打印消息,但由于某些原因它没有添加到控制台列表(视图角落的下拉列表,见下​​图)。

这就是我创建控制台的方式:

public void createConsole(String name) {
    ConsolePlugin plugin = ConsolePlugin.getDefault();
    IConsoleManager consoleManager = plugin.getConsoleManager();

    console = new MessageConsole(name, null);
    consoleManager.addConsoles(new IConsole[]{console});
}

然后我可以使用此方法打印消息:

public void print(String msg) {
    MessageConsoleStream out = console.newMessageStream();
    out.println(msg);
}

此外,我正在使用此方法将控制台视图置于最前面:

public void bringToFront() {
    try{
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        String id = IConsoleConstants.ID_CONSOLE_VIEW;
        IConsoleView view = (IConsoleView) page.showView(id);
        view.display(console);
    } catch(PartInitException e) {
        e.printStackTrace();
    }
}

有什么建议吗?

要向控制台视图添加新的类型控制台,您需要提供consoleFactories扩展名:

<extension
      point="org.eclipse.ui.console.consoleFactories">
   <consoleFactory
         class="com.example.MyConsoleFactory"
         icon="icons/etool16/my-console.png"
         label="My Console">
   </consoleFactory>
</extension>

工厂 class 需要为 openConsole 提供创建和显示控制台的实现,就像您在现有代码中所做的那样:

class ConsoleFactory implements IConsoleFactory {
  @Override
  public void openConsole() {
    IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
    MyConsole console = new MyConsole();
    consoleManager.addConsoles( new IConsole[] { console } );
    consoleManager.showConsoleView( console );
  }
}