Eclipse RCP開發4--在Eclipse RCP中加入Console視圖


    有時候在編寫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的動作,如下圖

  • 修改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輸出信息!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM