有時候在編寫RCP程序中,需要輸出一些信息,例如log信息,調試信息,等等。這時候,如果能夠將eclipse自帶的console視圖加入到我們自己編寫的程序中,將會是一件非常美妙的事情。下面將詳細的介紹如何將eclipse 自帶的console視圖引入到RCP程序中。
- 創建一個新的插件程序,例如起名為com.rcp.tutorial.view.console。
- 打開配置文件plugin.xml,在依賴(Dependencies)頁中,在Required Plug-ins,點擊Add,如下圖
- 添加org.eclipse.ui.console插件,如下圖
- 在擴展點(Extensions)頁添加org.eclipse.console.consoleFactories擴展點,並修改擴展元素Label為Output, Class 為com.rcp.tutorial.view.console.ConsoleFactory,如下圖
- 點擊class,創建 com.rcp.tutorial.view.console.ConsoleFactory的實現類,該類實現org.eclipse.ui.console.IConsoleFactory接口。此類最主要的實現方法為openConsole,加入以下代碼:
package com.rcp.tutorial.view.console;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleFactory;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
public class ConsoleFactory implements IConsoleFactory {
private static MessageConsole console = new MessageConsole("Output", null);
@Override
public void openConsole() {
if (console != null) {
IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
IConsole[] existing = manager.getConsoles();
boolean exists = false;
for (int i = 0; i < existing.length; i++) {
if (console == existing[i])
exists = true;
}
if(!exists){
manager.addConsoles(new IConsole[] { console });
}
manager.showConsoleView(console);
}
}
public static void closeConsole() {
IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
if (console != null) {
manager.removeConsoles(new IConsole[] { console });
}
}
public static MessageConsole getConsole(){
return console;
}
}
- 在Perspective類中加入以下代碼:
package com.rcp.tutorial.view.console;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
import org.eclipse.ui.console.IConsoleConstants;
public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(true);
layout.addView(IConsoleConstants.ID_CONSOLE_VIEW, IPageLayout.BOTTOM, .4f, layout.getEditorArea());
ConsoleFactory consoleFactory = new ConsoleFactory();
consoleFactory.openConsole();
}
}
- 運行程序,可以發現,console視圖已經加入到RCP程序中,如下圖,
- 測試在此console中輸出信息。在擴展點頁加入新的擴展點,org.eclipse.ui.commands,添加一個新的command,並創建org.rcp.tutorial.view.console.TestCmd類,該類執行該command的動作,如下圖
- 然后參考我的文章Eclipse RCP開發3--菜單、工具欄,創建以下菜單
- 修改TestCmd類,如下代碼
package com.rcp.tutorial.view.console;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.commands.IHandlerListener;
import org.eclipse.ui.console.MessageConsoleStream;
public class TestCmd implements IHandler {
@Override
public void addHandlerListener(IHandlerListener handlerListener) {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
MessageConsoleStream printer =ConsoleFactory.getConsole().newMessageStream();
printer.println("Hello, console!");
//System.out.println("Hello, console!");
return null;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isHandled() {
// TODO Auto-generated method stub
return true;
}
@Override
public void removeHandlerListener(IHandlerListener handlerListener) {
// TODO Auto-generated method stub
}
}
- 再次執行,如下圖
- 該程序可以像自身的console輸出信息!