rcp嵌入Eclipse自带的console

要使用Rcp嵌入Eclipse自带的console,首先,在plugin.xml的dependencies依赖关系中添加org.eclipse.ui.console


然后在plugin.xml中扩展consoleFactories

其中ConsoleFactory.java代码如下:


  1. public class ConsoleFactory implements IConsoleFactory {  
  2.     static MessageConsole console = new MessageConsole("Console Info:",  
  3.             null);  
  4.       
  5.     @Override  
  6.     public void openConsole() {  
  7.         showConsole();  
  8.     }  
  9.     public static void showConsole() {  
  10.           
  11.         if (console != null) {     
  12.                IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();     
  13.                IConsole[] existing = manager.getConsoles();     
  14.                boolean exists = false;     
  15.                //add the new MessageConsole instance into the control manager and show     
  16.                for (int i = 0; i < existing.length; i++) {     
  17.                    if (console == existing[i])     
  18.                        exists = true;     
  19.                }         
  20.                if(!exists){      
  21.                    manager.addConsoles(new IConsole[] { console });     
  22.                }     
  23.                manager.showConsoleView(console);    
  24.            }    
  25.     }  
  26.     public static void closeConsole(){  
  27.         IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();  
  28.         if (console != null){  
  29.             manager.removeConsoles(new IConsole[]{ console });  
  30.         }  
  31.     }  
  32.     public static MessageConsole getConsole(){  
  33.         return console;  
  34.     }  
  35.   
  36. }  

然后在Perspective.java透视图中将其显示出来

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		ConsoleFactory cf = new ConsoleFactory();
		layout.addView(IConsoleConstants.ID_CONSOLE_VIEW, IPageLayout.BOTTOM,
				0.70f, layout.getEditorArea());

		cf.openConsole();
	}
}

现在该console就会显示在透视图的下半部分了。但是这样加入的控制台显示的显示的信息条数是不限制的,输出的内容多了就会把RCP应用跑死,可以调用MessageConsole.setWaterMarks(5000, 8000);来限制输出条数。

定制Console View的ToolBar:

去掉RCP Console View 中的Open Console和Select Console按钮。

代码如下:

  1. IWorkbenchPage page = PlatformUI.getWorkbench().getWorkbenchWindows()[0].getPages()[0];  
  2. IViewPart viewpart = page.findView(IConsoleConstants.ID_CONSOLE_VIEW);  
  3. IActionBars actionBar = viewpart.getViewSite().getActionBars();  
  4. IToolBarManager toolbarMgr = actionBar.getToolBarManager();  
  5. IContributionItem[] items = toolbarMgr.getItems();  
  6. for (IContributionItem item : items) {  
  7.     if (item instanceof ActionContributionItem) {  
  8.         IAction action = ((ActionContributionItem) item).getAction();  
  9.         String text = action.getText();  
  10.         if (text.equals("Open Console") || text.equals("Select Console")) {  
  11.             toolbarMgr.remove(item);  
  12.         }  
  13.     }  
  14. }  
  15. actionBar.updateActionBars();  

如果不需要toobar中的任何东西,可以直接

  1. toolbarMgr.removeAll();  

console中打印日志信息

新建ConsoleHandler类:

public class ConsoleHandler{  
    private static MessageConsoleStream consoleStream;  
    
    public static void info(final String _message){  
        Display.getDefault().asyncExec(new Runnable(){  
            @Override  
            public void run() {  
                consoleStream = ConsoleFactory.getConsole().newMessageStream();  
                consoleStream.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+ "(INFO)" +   
                         " " + _message);  
            }  
        });  
    }  
    public static void error(final String _message){  
        Display.getDefault().asyncExec(new Runnable(){  
            @Override  
            public void run() {  
                consoleStream = ConsoleFactory.getConsole().newMessageStream();  
                consoleStream.setColor(new Color(null,255,0,0));  
                consoleStream.println(new SimpleDateFormat("HH:mm:ss").format(new Date())+ "(ERROR)" +   
                         " " + _message);  
            }         
        });  
    }        
}  

然后随时可以使用ConsoleHandler的静态方法输入日志。

可以看到现在的rcp上有很多menubar,这些是我们所不需要的,可以通过在代码中添加下列代码来简化menubar

  1. IWorkbenchPage page = PlatformUI.getWorkbench().getWorkbenchWindows()[0]  
  2.                 .getPages()[0];  
  3.         IViewPart viewpart = page.findView(IConsoleConstants.ID_CONSOLE_VIEW);  
  4.         // IActionBars actionBar = viewpart.getViewSite().getActionBars();  
  5.         IToolBarManager toolbarMgr = viewpart.getViewSite().getActionBars()  
  6.                 .getToolBarManager();  
  7.         // IToolBarManager toolbarMgr = actionBar.getToolBarManager();  
  8.         IContributionItem[] items = toolbarMgr.getItems();  
  9.         for (IContributionItem item : items) {  
  10.             if (item instanceof ActionContributionItem) {  
  11.                 IAction action = ((ActionContributionItem) item).getAction();  
  12.                 String text = action.getText();  
  13.                 if (text.equals("Open Console")  
  14.                         || text.equals("Select Console")) {  
  15.                     toolbarMgr.remove(item);  
  16.                 }  
  17.             }  
  18.         }  
  19.         viewpart.getViewSite().getActionBars().updateActionBars();  

  但是这些代码如果添加在ConsoleFactory.java中,要么出现透视图无法显示,也有会出现nullpoint的错误,后来将这些代码添加到该透视图中另外一个viewpart的构造函数中,问题得到解

决。

参考地址:http://blog.csdn.net/by84788186/article/details/6332299


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值