RCP探索一

按照网上下载的一些例子,试了没太大问题。但是在http://www.blogjava.net/youxia/archive/2007/03/22/82388.html#105651写一个rcp_start的例子时,出现了一些怪问题。实际上就是给一个最简单的RCP程序增加菜单,但是点击launch时,却什么也没显示,然后选择debug方式调试,结果提示的错误是:
java.lang.RuntimeException: Application "org.eclipse.ui.ide.workbench" could not be found in the registry. The applications available are: <NONE>.
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:68)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
显然是堆栈中出错,而且好象是系统内部的异常,在网上查找了也没太大收获。初步怀疑是因为eclipse 3.2的bug造成的,为了排队错误,决定重建一个项目现一步一步测试一下。

没办法,只好调试,eclipse的debug据说是很好用的,但是开始好久没找到门路,看到stack里面的错误也是一摸黑,根据不知道哪出错,就设置 断点(Ctrl+Shift+B或双击某一行)。我在ActionBarAdvisor类的makeActions方法中设置断点,然后单步执行,终于让 我看到错误原形是:action must not have null id。开始就没弄清楚下面代码:
    protected void makeActions(IWorkbenchWindow window) {
        action1=new Action1(window);
        action1.setText("第一个菜单项");
        action1.setId("whu.arcst.rcp_start.actions.action1");   // 这个ID怎么来的??????什么用途???
        register(action1);
    }

接着是一步Trace,单步执行进入register(action1),终于发现问题根源最后就在Action1中,我是通过New->class来生成的Action1类,结果发现Action1将所有的IWorkbenchAction的接口都包含进来,但是却没有实现,比如:setID函数,但是该函数完全是空的,因此我在上面调用action1.setID根本就没有把ID设置成功,因此,我只需要删除所有不需要的函数(这些函数已经在父类中默认实现了)即可。

晕,还是对整个系统不熟悉!!!

手工添加菜单终于成功了,接着试试从extension扩展,这个基本上没有太大的问题,只有一点,就是menubarPath是用来指定菜单的“路径”,实际上就是指明菜单添加到哪一级,whu.arcst.firstmenu/additions其中前部分必须与Action1指定的一样。
MenuManager newMenu=new MenuManager("第一个菜单","whu.arcst.firstmenu");

视图的增加,与菜单一样,都可以通过手工,也可以通过Designer.
以视图的标签,可以通过plugin.xml来改动:
http://www.blogjava.net/youxia/archive/2006/11/24/83377.aspx
注:改动以后,提示出错,说没有 property属性。

在perspective中加入多个view,其方法是利用IFolderLayout,如:
        IFolderLayout folder = layout.createFolder("folder", IPageLayout.RIGHT, 0.25f, editorArea);
        folder.addPlaceholder(FirstView.ID + ":*");
        folder.addView(FirstView.ID);
        folder.addView(TestView.ID);
        folder.addView(SecondView.ID);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值