作者:Dingo 来源:CSDN博客   酷勤网收集 2008-01-01

摘要
  NetBeans Platform用起来是非常方便的,很多功能都已经被platform的内置模块所实现,只需要根据自己的需要添加或者删除即可。就好像我们在用MFC开发GUI应用程序的情况类似。我们不需要为各种纷繁复杂的功能去烦心,只需要将精力都放在最重要的部分就好了。事半功倍。

最近一个月搞了一下RCP的开发,使用的是Netbeans Platform,在开发的过程中遇到了很多意想不到的问题,于是总结出来与大家共享。

项目的主要内容就是将一个Java SE开发的Application移植到Netbeans Platform平台上面。开发IDE选用Netbeans5.5,平台选择Netbeans6。

在Netbeans网站上面有一个开发CD Player的Demo,它从头开发了一个application配合web service使用,然后将这个application移植到netbeans平台上面,在移植的过程中,由于它的布局非常简单,所以直接就把主要的panel生成swing组件直接放到component里面就可以了,然而如果一个比较大的多页面的项目这么做就有点复杂了,因为初始化的过程是比较复杂的。可以参考Netbeans网站上面关于模块开发中的demo,按照Anagram Game的教程,需要将原application的主类代码重写就可以。所以我建议在开发Application的时候不要把所有的东西都放在一个Frame里面,应该最好是写成Panel,这样既可以在Frame里面嵌入,也可以在Topcomponent里面嵌入。

在从Panel一直到TopComponent的时候,我遇到的最大的问题就是初始化的问题。原application是三个tab页面,现在移植到platform上需要新建三个Window Top Component,每个window放一个tab页。由于原application都会有一个入口,在入口处对程序所需要的资源进行初始化,而移植到platform上面之后,每个Window Top Component初始化的顺序是不确定的,所以需要在每个window中进行资源的初始化,而且还要保证不要影响全局变量。如果把资源的初始化都放在一个window中,那么其他window启动的时候就会出现Nullpoint的异常。

一旦出现空指针的异常,那么程序无法正常运行,而且通过菜单中的build->stop build/run是不能将正在运行的程序停止的。我们如果再次点击运行,那么就会在屏幕的左上角出现一个只有标题栏的空Frame,这说明我们刚才的程序还没有真正停止。打开进程管理器会看到有两个java.exe进行,其中一个是netbeans启用的java,占用200多M,另外一个就是我们所写的程序启动的java,大概几M到几十M不等。我们只有把这个占用内存相对较少的java.exe手动结束,这时会看到netbeans的output console里面会显示build success,表示程序已经停止。

而且对代码进行修改之后一定要清除并重新编译才可以正常启动,不过在重新编译之前要先按照之前所说的步骤把刚才出错的程序停止运行。停止之后再clean and build all就可以重新编译。如果显示“工程名.xml”出错,那么就去工程所在目录里面,将build目录删除再编译即可。


如果我们已经准备好了相应的panel,那么我们在代码中手动将Panel添加到Window Top Component里面的时候要注意layout。因为Netbeans开发GUI的时候是用matisse采用group layout,而group layout的代码都是自动生成的。如果想在用matisse布局的panel上面添加我们所设计的panel1,使用panel.add(panel1);这样的代码是不行的。运行的时候是根本看不到任何东西的。在写add之前我们需要重新设定panel的布局,所以如果想实现刚才的功能需要写以下代码:

jPanel1.setLayout(new BorderLayout());

jPanel1.add(panel1);

这样再运行就可以看到我们所添加的panel1了。至于group layout等相关布局的内容我没有做相关研究。


在开发插件和开发RCP的过程中,在wizard(向导)中会对所新建的组建进行一些相关参数的设置。例如对Action,TopComponent的名称,位置的设置。那么如果我们以后想改名字和相关的参数怎么办?这些参数都保存在一些xml文件中。新建的Module分类中的类的参数都会保存在Bundle.properties文件中,这个文件与所建立的类在同一个文件夹,例如,打开一个Bundle.properties文件可以看到:

CTL_AboutAction=&About

CTL_NewAction=&New

CTL_SimAppTopComponent=Application Config Window

CTL_SimTopComponent=Grid Config Window

CTL_SimulationTopComponent=Simulation Window

HINT_SimAppTopComponent=This is a Application Configuration window

HINT_SimTopComponent=This is a Grid Configuration window

HINT_SimulationTopComponent=This is a Simulation window

这里面CTL开头的表示这个类在窗口中所显示的名字,例如Action就是在菜单中会显示的名字,TopComponent是窗口组建所显示的标题名字。HINT开头的就是相当于Toolkit hint的功能,当鼠标移动到桌面标题的时候会显示相应的提示信息。我们修改以上参数即可。

整个项目的参数设置都在layer.xml文件中,里面包含了很多很重要的布局信息。通过直接编辑就可以改变很多布局内容,不过如果不熟悉还是不建议去改。不过我们可能会经常需要改变菜单的顺序,这样可以点击工程中的Important Files,第一项就是XML Layer,展开后可以看到有this layer和this layer in context。展开第一个可以看到有Action,Menu和Windows2。在这里可以通过拖拽改变Menu的顺序。

如果我们不想使用platform的原始菜单,那么就需要在project property中的library中的platform6中的Core-UI模块选中,如果不选中则会有最简单的Goto,View和Windows三个菜单,其他的菜单都可以自己去做。一般多窗口的菜单Windows是需要的,如果不想显示Goto和View的话可以在layer.xml中添加以下两行:

<file name="GoTo_hidden"/>

<file name="View_hidden"/>

当然每个TopComponent组件都会有一个相应的xml文件来写明参数,不过这些不需要我们去关心。


NetBeans Platform用起来是非常方便的,很多功能都已经被platform的内置模块所实现,只需要根据自己的需要添加或者删除即可。就好像我们在用MFC开发GUI应用程序的情况类似。我们不需要为各种纷繁复杂的功能去烦心,只需要将精力都放在最重要的部分就好了。事半功倍。

来自:http://blog.csdn.net/dingyilong/archive/2007/07/02/1674880.aspx

分类: 开发工具 管理工具 修炼之道



关于酷勤 | 联系方式 | 免责声明 | 友情链接