基于NetBeans 5.0 Mobility Pack 5无线应用开发
1.NetBeans 5的无线开发
NetBeans 从1996年捷克几个大学生的作业Calfi到现在与IBM Eclipse竞争的Java集成开发平台,其传奇的色彩始终为开源的爱好者津津乐道。如今,Eclipse在Java开发者的群体当中占据了相当的份额,NetBeans则被指责没有广泛的插件开发支持,无线开发功能的局限以及界面不方便使用等问题;NetBeans 5.0 的出现使得这一切都有了答案,改进的界面,新的GUI编辑器Matisse,方便的插件开发平台以及强大的无线开发模块掀开了NetBeans针对Eclipse的反击战。本文将以无线Java开发领域当中备受关注的3D开发为例,介绍基于NetBeans 5.0当中的无线开发模块Mobility Pack 5的无线应用开发。
首先,我们介绍一下手机3D开发领域中非常重要的一些技术,如M3G,建模,标准等,然后,我们通过一个实例说明如何利用NetBeans5.0进行无线开发。最后总结一些NetBeans无线部分的新功能。
2.3D无线应用标准M3G
手机应用特别是手机游戏发展到今天已经开始逐渐从简单的平面效果向3D等立体效果的应用方向发展,特别是随着移动设备的不断升级更新,Java行业标准的不断完善,手机应用向3D方向发展的时机已经成熟。其中,M3G就是其中发展最为迅速的一项技术,M3G(Mobile 3D Graphics API)是在 JSR 184(Java 规范请求,Java Specification Request)中定义的,J2ME Wireless Toolkit 2.2以及以上版本已经附带了m3g库,使得我们可以利用手机等移动设备在CLDC1.1,MIDP2.0上进行三维应用以及游戏的设计。
3.制作M3G模型
手机等无线应用往往把复杂的建模过程简化为一个m3g格式的二进制文件,创建3D模型可以使用3DS Max等商业软件或者Blender等开源的建模软件进行。模型完成后再转换成m3g格式的文件,目前已经有很多m3g文件的导出工具,包括:M3GToolkit, Juinness 以及HI Corp Mascot v5 M3G Converter等免费或商业软件,他们可以把各种3D模型文件如3ds, max, obj等转换成为无线应用当中可以识别的m3g格式的文件。在MIDP当中调用。在本文中,我们使用Blender作为建模软件,并且使用其导出插件制作m3g文件。
首先我们使用Blender创建一个3D模型rotate,如图所示,这里不对建模等具体操作进行介绍,具体的制作可以参考www.blender.org的一些文档,这里要说明的是导出m3g文件的过程。Blender本身不带有导出m3g的功能,需要使用第三方的导出插件,可以在http://www.nelson-games.de/bl2m3g/default.html下载, 这个插件需要Python的支持,需要下载并且安装Python,同时将Python的库路径添加到系统环境变量PYTHONPATH中,如python安装在C:PYTHON24,则PYTHONPATH 为“C:PYTHON24;C:PYTHON24DLLS;C:PYTHON24LIB;C:PYTHON24LIBLIB-TK”。安装完插件后Blender的File-Export菜单中会多出一个M3G in J2ME的菜单,就可以直接把建好的模型导出成m3g的格式。
4.利用Mobility Pack 5 进行开发
在使用NetBeans之前,我们还需要下载并且安装J2ME Wireless Toolkit,可以到sun的官方网站去下载,最新的是2.3 beta,这里我们使用的是2.2版本。
准备工作做好了以后,我们就可以使用NetBeans5.0附带的Mobility Pack 5的强大平台来构建移动3D应用:
1)在NetBeans5当中创建一个新的移动应用程序:文件|新建项目,选择移动|移动应用程序,Mobility Pack无缝集成了J2ME WTK的项目支持,在移动应用程序当中可以选择直接导入J2MEWTK 或者Sun Java Studio Mobility的项目,当前有大量的无线应用在J2MEWTK上开发,生成和测试,NetBeans 5.0使得移植这些程序变得异常简单。
2)选择Next,项目名称设为MyMobileApp,取消创建Hello Midlet,这个选项会自动生成一个简单的Midlet,作为一个起始点,开始开发者的其它部分代码。我们先从一个简单的例子开始,创建一个自己的Midlet。选择完成。
3)右键点击缺省包,选择创建Midlet,Midlet名称和包名称均设为My3DMidlet, 选择完成。My3DMidlet.java文件自动出现在编辑区,程序的基本框架已经出现,在编辑区的上面有一排小按钮,可以方便查找,编辑,注释,宏录制等操作,其上的Tab浏览页按钮也支持拖拽,滚动,下拉菜单浏览等功能。在编辑区左侧有行号显示和展开缩进代码块的按钮,非常方便。其浅蓝色渐进式设计也非常令人赏心悦目,可以说NetBeans的编辑环境已经非常成熟。
4)创建一个用来显示3D画面的Canvas:My3DCanvas,右键点击My3DMidlet包,选择新建|Java类,类名设为My3DCanvas,代码如下:
package My3DMidlet; import javax.microedition.lcdui.*; import javax.microedition.m3g.Graphics3D; import javax.microedition.m3g.Loader; import javax.microedition.m3g.World; /** * * @author ganglin */ public class My3DCanvas extends Canvas{ Graphics3D g3d; World world; int currentTime = 0; /** Creates a new instance of My3DCanvas */ public My3DCanvas() { g3d = Graphics3D.getInstance(); try{ Object root[] = Loader.load("rotate.m3g"); world = (World)root[0]; } catch (Exception ex) { ex.printStackTrace(); } } protected void paint(Graphics g) { g3d.bindTarget(g); world.animate(currentTime); currentTime += 50; g3d.render(world); g3d.releaseTarget(); } }
以上代码首先创建了一个Graphics3D的对象,然后将其绑定到一个2D的缓存当中,渲染World场景,节点Node等对象,最后释放对象,并且将渲染好的3D试图送入2D的缓存当中。
在编辑代码的过程中,我们已经可以体会到NetBeans在代码编辑方面的进步,比如可以使用修复导入来自动添加程序所需要的所有的导入库,并且删除不必要的库,可以通过键入“.”来选择函数或成员列表,按住Ctrl单击类名或函数名来查看声明和实现,自动生成try catch块等等。
5)在My3DMidlet.java中添加显示Canvas的语句,
private Canvas canvas;
public void startApp() {
if (canvas==null)
Display.getDisplay(this).setCurrent(canvas=new My3DCanvas());
}
6)把我们前面生成的m3g文件拷贝到与src同一个目录的res目录当中,然后在项目属性窗口中选择生成|库和资源|添加文件夹,将m3g资源的路径加入,这样编译器就可以找到我们提供的模型文件。
7)最后,F6执行主项目,J2MEWTK的缺省彩色模拟器会自动弹出,如图所示:
5.NetBeans 5.0 MobilityPack 5 的新特性
以上,我们通过一个实例介绍了MobilityPack的概况和一些开发流程,实际上,Mobility 5的创新点很多,限于篇幅,不能详细介绍,这里,简单列举新版本当中的一些重要改进:
◆流程设计器:支持Drag-and-Drop方式,可以自由定制执行流程,显示窗口以及执行动作;并且自动生成相应的代码;
◆无线连接向导:通过Midlet与Web Service和服务器端代码进行连接,支持JSR-172;
◆用户定义配置:当开发与配置相关的应用时,可以使用项目模板一次性创建配置,然后在不同的项目当中重复使用;
◆部署向导:通过WebDAV,FTP,SCP等方式将Midlet上传到设备上进行部署;
◆本地化MIDP:允许加入本地化的一些MIDP模块;
◆集成的混淆器以及优化器:MIDP程序非常容易被反编译进而得到源代码,NetBeans 5 集成了混淆器,使得编译结果难以反汇编。
◆ CDC项目向导:添加了对CDC项目的直接支持;
◆可以利用Matisse进行CDC开发时的界面编辑;
◆支持Sony Ericsson CDC Platform 1 和Nokia S80 平台;
◆支持更多的第三方模拟器:NetBeans 5.0 可以支持几乎所有主流手机厂商的开发平台模拟器,包括:Motorola,Nokia,Samsung;Siemens 和BENQ,索尼爱立信;
◆JUnit支持:可以使用JUnit测试CDC 应用程序;