org.eclipse.ui.console指南
来源:互联网 发布:中国数据安全峰会 编辑:程序博客网 时间:2024/05/16 07:32
转自:http://blog.csdn.net/hansoft/archive/2005/07/05/415015.aspx
org.eclipse.ui.console是一个可扩展的console视图插件,利用它可以实现各种console,并把它们显示出来。该插件本身就实现了一个Message Console,对于只需要进行消息输出的RCP应用来说,其功能已经足够:
- 调用ConsolePlugin.getDefault().getConsoleManager()得到一个IConsoleManager引用
- 创建所需的MessageConsole,并把它(们)加入到上一步得到的Console Manager里
- 调用MessageConsole.newMessageStream()得到连接这个Console的输出流(MessageConsoleStream)
- 通过MessageConsoleStream的print,println方法进行消息的输出。当然需要把Console View打开才能看到输出,可以利用Window/Show View来打开,或者把该View在放到自己实现的Perspective的初始布局中
下面简要列举其设计及实现要点:
- 作为一个通用的console及其显示的框架,org.eclipse.ui.console定义了以下几个接口:
- IConsole. 代表一个Console,主要方法是createPage,用来创建该Console在Console View中的分页
- IConsole Manager. 代表一个Console Manager,对Console进行管理
- IConsoleListener. 代表一个Console Listener,当Console被加进Console Manager中或从中删除时会得到通知
- IConsoleView. 代表Console View,用来显示各个Console
- org.eclipse.ui.console本身实现了一个Console View,通过在org.eclipse.ui.views扩展点上扩展的方式。该实现已经相当一般化,一般情况下是不需要实现自己的Console View的.它的实现类是ConsoleView,是一个PageBookView,每个Console以一个Page的方式呈现,效果就是我们在eclipse里看到的那个Console标签页。
- Console和PageBookViewPage的关系。简言之,就是MVC中Model和View的关系,Model是Console,Page负责把它显示出来。对于TextConsole和TextConsolePage,这种Model-View关系是通过TextConsole和(TextConsolePage所关联的)TextConsoleViewer之间的Model-View关系来实现的,如图所示。再看TextConsole和TextConsoleViewer的Model-View关系的实现:TextConsole关联一个ConsoleDocument,实现了IDoucment接口,而TextConsoleViewer是一个TextViewer,在其构造函数中设置其Document为TextConsole关联的Document(ConsoleDocument),由此可以看出,TextConsole和TextConsolePage之间的Model-View关系最终还是由jfacetext框架的IDocument和TextViewer之间的Model-View关系来实现的。Console和其Page的关系是通过IConsole的createPage方法来建立的,比如,TextConsole的createPage创建的TextConsolePage对象保存了相应TextConsole对象的引用;对于MessageConsole来说,由于它没有覆盖IOConsole的createPage方法,因此创建的是一个IOConsolePage对象, 该IOConsolePage对象保存的虽然是一个TextConsole引用,但其实际类型是MessageConsole。
- 当向第1步得到的ConsoleManager里加Console时,如果此时ConsoleView已经实例化,则它会是该Console Manager 的一个ConsoleListener,因此会受到consolesAdded的事件通知,ConsoleView对此事件的处理是调用相应Console的createPage方法创建一个IPageBookViewPage并显示它。如果ConsoleView是以后实例化的,则它实例化时会从Console Manager取到当前在Console Manager中的所有Console,对每个Console创建一个IPageBookViewPage。
- MessgaeConsole是一个IOConsole,IOConsole用于显示I/O流里的Text;而IOConsole又是一个TextConsole,TextConsole是一个抽象的文本Console,支持正则表达式匹配和超级链接,它包含一个Document,概念上就是 jfacetext框架中的文档概念,其实现类是ConsoleDocument。MessageConsole.createPage返回的实际上是一个IOConsolePage,其createControl方法的实现创建了一个IOConsoleViewer,该viewer是jfacetext框架的TextViewer,其Document被设置为这个MessageConsole的Document,因此当MessageConsole的Document改变时, 其Page上的TextViewer将反映该变化。
- IOConsole关联一个DoucmentPartitioner(IConsoleDocumentPartitioner),该接口扩展自jface text框架中的IDocumentPartitioner,其实现类是IOConsolePartitioner.当通过MessageConsoleStream往MessageConsole上输出消息时,消息实际进入了这个IOConsolePartitioner内部保存的一个消息列表里。IOConsolePartitioner里实现了一个JobScheduling,其效果就是不断检查该消息列表,把其中的消息添加到MessageConsole的Document的末尾,当然这个工作是在另外的 线程中作的。此时如果ConsoleView已实例化,则该MessageConsole会和其Page上IOConsoleViewer相关联,因此消息便能在该Console的Page中显示出来了。
- org.eclipse.ui.console指南
- org.eclipse.ui.console指南
- org.eclipse.ui.console指南
- 彈出式菜單 org.eclipse.ui.popupMenus
- org.eclipse.jst.j2ee.ui
- 【OSGi】Could not find bundle: org.eclipse.equinox.console
- 【OSGi】Could not find bundle: org.eclipse.equinox.console问题
- Could not find bundle: org.eclipse.equinox.console
- Could not find bundle: org.eclipse.equinox.console
- Could not find bundle: org.eclipse.equinox.console
- eclipse使用hibernate tools插件错误org.hibernate.console.HibernateConsoleRuntimeException:
- 扩展点:org.eclipse.ui.actionSets
- org.eclipse.ui.editors插入点
- org.eclipse.ui.decorators得用法
- org.eclipse.ui.bindings key sequence
- org.eclipse.ui.startup扩展点介绍
- org.eclipse.ui.dialogs.FilteredTree的使用
- org.eclipse.ui.navigator.linkHelper的使用
- linux2.6.x的配置文件kconfig语法
- 项目感想
- Effective C++ 01
- JS实现的下接导航条,被FLASH遮住了!
- 打印ASP.NET
- org.eclipse.ui.console指南
- Oracle多行记录合并/连接/聚合字符串的几种方法
- FFMpeg框架代码阅读
- 今天是寒露
- 基于S3C2410X的Linux-2.6.14.1系统移植
- 使用企业库在某些站点会报试图执行安全策略不允许的操作异常的解决方法
- 汇编语言编译器CmasmW的调试方法
- 腾讯智力笔试题(精)
- JSP内部对象