rcp嵌入Eclipse自带的console

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


然后在plugin.xml中扩展consoleFactories

其中ConsoleFactory.java代码如下:


  1. publicclassConsoleFactoryimplementsIConsoleFactory{
  2. staticMessageConsoleconsole=newMessageConsole("Console Info:",
  3. null);
  4. @Override
  5. publicvoidopenConsole(){
  6. showConsole();
  7. }
  8. publicstaticvoidshowConsole(){
  9. if(console!=null){
  10. IConsoleManagermanager=ConsolePlugin.getDefault().getConsoleManager();
  11. IConsole[]existing=manager.getConsoles();
  12. booleanexists=false;
  13. //addthenewMessageConsoleinstanceintothecontrolmanagerandshow
  14. for(inti=0;i<existing.length;i++){
  15. if(console==existing[i])
  16. exists=true;
  17. }
  18. if(!exists){
  19. manager.addConsoles(newIConsole[]{console});
  20. }
  21. manager.showConsoleView(console);
  22. }
  23. }
  24. publicstaticvoidcloseConsole(){
  25. IConsoleManagermanager=ConsolePlugin.getDefault().getConsoleManager();
  26. if(console!=null){
  27. manager.removeConsoles(newIConsole[]{console});
  28. }
  29. }
  30. publicstaticMessageConsolegetConsole(){
  31. returnconsole;
  32. }
  33. }

然后在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. IWorkbenchPagepage=PlatformUI.getWorkbench().getWorkbenchWindows()[0].getPages()[0];
  2. IViewPartviewpart=page.findView(IConsoleConstants.ID_CONSOLE_VIEW);
  3. IActionBarsactionBar=viewpart.getViewSite().getActionBars();
  4. IToolBarManagertoolbarMgr=actionBar.getToolBarManager();
  5. IContributionItem[]items=toolbarMgr.getItems();
  6. for(IContributionItemitem:items){
  7. if(iteminstanceofActionContributionItem){
  8. IActionaction=((ActionContributionItem)item).getAction();
  9. Stringtext=action.getText();
  10. if(text.equals("OpenConsole")||text.equals("SelectConsole")){
  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. IWorkbenchPagepage=PlatformUI.getWorkbench().getWorkbenchWindows()[0]
  2. .getPages()[0];
  3. IViewPartviewpart=page.findView(IConsoleConstants.ID_CONSOLE_VIEW);
  4. //IActionBarsactionBar=viewpart.getViewSite().getActionBars();
  5. IToolBarManagertoolbarMgr=viewpart.getViewSite().getActionBars()
  6. .getToolBarManager();
  7. //IToolBarManagertoolbarMgr=actionBar.getToolBarManager();
  8. IContributionItem[]items=toolbarMgr.getItems();
  9. for(IContributionItemitem:items){
  10. if(iteminstanceofActionContributionItem){
  11. IActionaction=((ActionContributionItem)item).getAction();
  12. Stringtext=action.getText();
  13. if(text.equals("OpenConsole")
  14. ||text.equals("SelectConsole")){
  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、付费专栏及课程。

余额充值