基于NetBeans 5.0 Mobility Pack 5無線應用開發(fā)
1.NetBeans 5的無線開發(fā)
NetBeans 從1996年捷克幾個大學生的作業(yè)Calfi到現(xiàn)在與IBM Eclipse競爭的Java集成開發(fā)平臺,其傳奇的色彩始終為開源的愛好者津津樂道。如今,Eclipse在Java開發(fā)者的群體當中占據(jù)了相當?shù)姆蓊~,NetBeans則被指責沒有廣泛的插件開發(fā)支持,無線開發(fā)功能的局限以及界面不方便使用等問題;NetBeans 5.0 的出現(xiàn)使得這一切都有了答案,改進的界面,新的GUI編輯器Matisse,方便的插件開發(fā)平臺以及強大的無線開發(fā)模塊掀開了NetBeans針對Eclipse的反擊戰(zhàn)。本文將以無線Java開發(fā)領域當中備受關注的3D開發(fā)為例,介紹基于NetBeans 5.0當中的無線開發(fā)模塊Mobility Pack 5的無線應用開發(fā)。
首先,我們介紹一下手機3D開發(fā)領域中非常重要的一些技術,如M3G,建模,標準等,然后,我們通過一個實例說明如何利用NetBeans5.0進行無線開發(fā)。最后總結(jié)一些NetBeans無線部分的新功能。
2.3D無線應用標準M3G
手機應用特別是手機游戲發(fā)展到今天已經(jīng)開始逐漸從簡單的平面效果向3D等立體效果的應用方向發(fā)展,特別是隨著移動設備的不斷升級更新,Java行業(yè)標準的不斷完善,手機應用向3D方向發(fā)展的時機已經(jīng)成熟。其中,M3G就是其中發(fā)展最為迅速的一項技術,M3G(Mobile 3D Graphics API)是在 JSR 184(Java 規(guī)范請求,Java Specification Request)中定義的,J2ME Wireless Toolkit 2.2以及以上版本已經(jīng)附帶了m3g庫,使得我們可以利用手機等移動設備在CLDC1.1,MIDP2.0上進行三維應用以及游戲的設計。
3.制作M3G模型
手機等無線應用往往把復雜的建模過程簡化為一個m3g格式的二進制文件,創(chuàng)建3D模型可以使用3DS Max等商業(yè)軟件或者Blender等開源的建模軟件進行。模型完成后再轉(zhuǎn)換成m3g格式的文件,目前已經(jīng)有很多m3g文件的導出工具,包括:M3GToolkit, Juinness 以及HI Corp Mascot v5 M3G Converter等免費或商業(yè)軟件,他們可以把各種3D模型文件如3ds, max, obj等轉(zhuǎn)換成為無線應用當中可以識別的m3g格式的文件。在MIDP當中調(diào)用。在本文中,我們使用Blender作為建模軟件,并且使用其導出插件制作m3g文件。
首先我們使用Blender創(chuàng)建一個3D模型rotate,如圖所示,這里不對建模等具體操作進行介紹,具體的制作可以參考www.blender.org的一些文檔,這里要說明的是導出m3g文件的過程。Blender本身不帶有導出m3g的功能,需要使用第三方的導出插件,可以在http://www.nelson-games.de/bl2m3g/default.html下載, 這個插件需要Python的支持,需要下載并且安裝Python,同時將Python的庫路徑添加到系統(tǒng)環(huán)境變量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 進行開發(fā)
在使用NetBeans之前,我們還需要下載并且安裝J2ME Wireless Toolkit,可以到sun的官方網(wǎng)站去下載,最新的是2.3 beta,這里我們使用的是2.2版本。
準備工作做好了以后,我們就可以使用NetBeans5.0附帶的Mobility Pack 5的強大平臺來構(gòu)建移動3D應用:
1)在NetBeans5當中創(chuàng)建一個新的移動應用程序:文件|新建項目,選擇移動|移動應用程序,Mobility Pack無縫集成了J2ME WTK的項目支持,在移動應用程序當中可以選擇直接導入J2MEWTK 或者Sun Java Studio Mobility的項目,當前有大量的無線應用在J2MEWTK上開發(fā),生成和測試,NetBeans 5.0使得移植這些程序變得異常簡單。
2)選擇Next,項目名稱設為MyMobileApp,取消創(chuàng)建Hello Midlet,這個選項會自動生成一個簡單的Midlet,作為一個起始點,開始開發(fā)者的其它部分代碼。我們先從一個簡單的例子開始,創(chuàng)建一個自己的Midlet。選擇完成。
3)右鍵點擊缺省包,選擇創(chuàng)建Midlet,Midlet名稱和包名稱均設為My3DMidlet, 選擇完成。My3DMidlet.java文件自動出現(xiàn)在編輯區(qū),程序的基本框架已經(jīng)出現(xiàn),在編輯區(qū)的上面有一排小按鈕,可以方便查找,編輯,注釋,宏錄制等操作,其上的Tab瀏覽頁按鈕也支持拖拽,滾動,下拉菜單瀏覽等功能。在編輯區(qū)左側(cè)有行號顯示和展開縮進代碼塊的按鈕,非常方便。其淺藍色漸進式設計也非常令人賞心悅目,可以說NetBeans的編輯環(huán)境已經(jīng)非常成熟。
4)創(chuàng)建一個用來顯示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();
- }
- }
以上代碼首先創(chuàng)建了一個Graphics3D的對象,然后將其綁定到一個2D的緩存當中,渲染W(wǎng)orld場景,節(jié)點Node等對象,最后釋放對象,并且將渲染好的3D試圖送入2D的緩存當中。
在編輯代碼的過程中,我們已經(jīng)可以體會到NetBeans在代碼編輯方面的進步,比如可以使用修復導入來自動添加程序所需要的所有的導入庫,并且刪除不必要的庫,可以通過鍵入“.”來選擇函數(shù)或成員列表,按住Ctrl單擊類名或函數(shù)名來查看聲明和實現(xiàn),自動生成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)最后,F(xiàn)6執(zhí)行主項目,J2MEWTK的缺省彩色模擬器會自動彈出,如圖所示:
5.NetBeans 5.0 MobilityPack 5 的新特性
以上,我們通過一個實例介紹了MobilityPack的概況和一些開發(fā)流程,實際上,Mobility 5的創(chuàng)新點很多,限于篇幅,不能詳細介紹,這里,簡單列舉新版本當中的一些重要改進:
◆流程設計器:支持Drag-and-Drop方式,可以自由定制執(zhí)行流程,顯示窗口以及執(zhí)行動作;并且自動生成相應的代碼;
◆無線連接向?qū)В和ㄟ^Midlet與Web Service和服務器端代碼進行連接,支持JSR-172;
◆用戶定義配置:當開發(fā)與配置相關的應用時,可以使用項目模板一次性創(chuàng)建配置,然后在不同的項目當中重復使用;
◆部署向?qū)В和ㄟ^WebDAV,F(xiàn)TP,SCP等方式將Midlet上傳到設備上進行部署;
◆本地化MIDP:允許加入本地化的一些MIDP模塊;
◆集成的混淆器以及優(yōu)化器:MIDP程序非常容易被反編譯進而得到源代碼,NetBeans 5 集成了混淆器,使得編譯結(jié)果難以反匯編。
◆ CDC項目向?qū)В禾砑恿藢DC項目的直接支持;
◆可以利用Matisse進行CDC開發(fā)時的界面編輯;
◆支持Sony Ericsson CDC Platform 1 和Nokia S80 平臺;
◆支持更多的第三方模擬器:NetBeans 5.0 可以支持幾乎所有主流手機廠商的開發(fā)平臺模擬器,包括:Motorola,Nokia,Samsung;Siemens 和BENQ,索尼愛立信;
◆JUnit支持:可以使用JUnit測試CDC 應用程序;
6.基于NetBeans 5.0無線開發(fā)總結(jié)
NetBeans 5.0 為無線開發(fā)的愛好者提供了一個強大的開發(fā)平臺,同時,因為與Sun其他系列產(chǎn)品無縫集成,比如JDK,J2ME WTK,Java Studio Mobility等,使得開發(fā)基于J2ME技術的MIDP以及CDC應用非常簡單而且生成代碼質(zhì)量高。我們期待看到更多更優(yōu)秀的特性在NetBeans當中出現(xiàn),方便開發(fā)者,方便用戶。
【編輯推薦】