京山游俠

          專注技術,拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            我們是程序員,我們沒有各種各樣的應酬,電腦和網絡就是我們的整個世界。上班之余,我們該如何自娛自樂呢?想一想我們每天別在褲腰帶上的手機,再想一想我們已經非常熟悉Java,那么,我們為什么不寫幾個J2ME的手機程序玩玩呢?

            首先,我們需要搭建一個開發環境。Eclipse和NetBeans都是好選擇。我這里選擇的是NetBeans 5.5.1加Mobile Pack 5.5.1, 它們的下載地址如下圖:
            ? 01.PNG
            
            點擊上面的Download NetBeans IDE按鈕,就可以進入到詳細的下載頁面,如下圖,這里,我們只需要NetBeans和MobilePack,其它的我們用不到。

            02.PNG

            下載完成后,運行安裝程序,安裝完后,運行NetBeans IDE,如下圖:

            03.PNG

            本來以為,NetBeans IDE的界面是使用Swing編寫的,肯定漂亮不起來。現在一看,以前的偏見都沒有了,這個界面的確很漂亮,看來SUN再超越Eclipse方面的確下了不少功夫。在這個啟動界面中,我們甚至可以訪問NetBeans星球中的博客,確實令人耳目一新。此外,從NetBeans IDE的菜單來看,似乎功能比Eclipse要多,看來以后還得好好探索才行啊。至于NetBeans速度慢的問題,我再也不需擔心,因為我剛配置了一個雙核CPU加4G內存的臺式機。這也正是為什么我直到現在才涉足NetBeans的原因。

            廢話少說,下面來看看怎么編寫手機程序吧。

            首先,新建項目,在類別中選Mobile,在項目中選“Mobile應用程序”,如下圖:
            04.PNG

            點下一步,在這里輸入項目的名稱和保存項目的位置,注意這里,我們取消了“創建Hello MIDlet”前面的選擇,如下圖:
            05.PNG

            在點下一步,在下面的對話框中選擇CLDC和MIDP的版本,如下圖:
            06.PNG

            在這里,肯定有人要問:“什么是CLDC?什么MIDP呢?”這是兩個規范。CLDC(連接受限設備配置)定義了我們的手機應該提供什么樣的虛擬機和什么樣的核心Java類庫,比如我們下面的程序中用到的java.lang.String類,java.io.ByteArrayOutputStream類等等。那么為什么要選擇CLDC1.0而不是1.1呢?那就要看你的手機了,我的Nokia手機就只支持CLDC1.0。MIDP(移動信息設備簡表)位于CLDC基礎之上,為開發者提供了應用程序模型、圖形用戶界面等功能,比如我們下面的程序中用到的javax.microediton.midlet.MIDlet類、javax.microediton.lcdui.Display類,甚至我們以后編寫游戲用到的javax.microedition.lcdui.game.*包中的類,都是MIDP規范定義的,也就是說,只要我們的手機滿足這兩個規范,我們使用這些類寫的程序就能夠在手機上正常運行。現在最流行的MIDP版本為2.0。大家在為自己的手機寫程序的時候,請參考用戶手冊。

            點擊完成,我們就創建好了項目。

            在項目名稱上面單擊鼠標右鍵,在快捷菜單中選擇新建Java包,這一步,可以讓我們創建一個包來保存我們的程序代碼,如下圖:
            07.PNG

            下一步,輸入包名:
            08.PNG

            下一步,當然是新建一個MIDlet了,這里的MIDlet,是一個繼承自javax.microedition.midlet.MIDlet類的Java類,也就是我們的手機程序的主程序,好比瀏覽器小程序稱為Applet,而服務期端程序稱為Servlet,這么一對比,就不難理解MIDlet的概念了。如下圖:
            09.PNG

            輸入類名,如下圖,在這個圖中可以看出,我們還可以為我們的程序指定圖標,圖標可以是一個png格式的圖片文件,我們這里省略,因為我們還沒有為我們的程序準備這樣的資源。
            10.PNG

            點擊完成,下面就是IDE為我們自動生成的代碼:
            11.PNG

            這個自動生成的代碼代表了一個手機程序的生命周期,其中的startApp()就相當于普通Java程序的main(),而其它兩個方法,則分別在程序暫停和程序退出的時候執行。我們對該程序進行擴充,代碼如下:

          /*
          ?*?MyFirstMidlet.java
          ?*
          ?*?Created?on?2007年7月16日,?下午8:38
          ?
          */


          package ?com.xkland.j2me;

          import ?java.io.ByteArrayOutputStream;
          import ?java.io.IOException;
          import ?javax.microedition.midlet. * ;
          import ?javax.microedition.lcdui. * ;

          /**
          ?*
          ?*?
          @author ??海邊沫沫
          ?*?
          @version
          ?
          */

          public ? class ?MyFirstMidlet? extends ?MIDlet? implements ?CommandListener? {
          ????
          private ?Display?display? = ? null ;
          ????
          private ?Form?mainForm? = ? null ;
          ????
          public ? static ? final ?Command?exitCommand? = ? new ?Command( " 退出 " ,Command.OK, 1 );
          ????
          ????
          public ? void ?startApp()? {
          ????????
          if (display == null ) {
          ????????????display?
          = ?Display.getDisplay( this );
          ????????}

          ????????mainForm?
          = ? new ?Form( " MyFirstMobileApplication " );
          ????????String?text?
          = ? " 歡迎來到J2ME開發世界! " ;
          ????????mainForm.append(text);
          ????????mainForm.addCommand(exitCommand);
          ????????mainForm.setCommandListener(
          this );
          ????????display.setCurrent(mainForm);
          ????}

          ????
          ????
          public ? void ?pauseApp()? {
          ????}

          ????
          ????
          public ? void ?destroyApp( boolean ?unconditional)? {
          ????}

          ????
          ????
          public ? void ?commandAction(Command?cmd,?Displayable?displayable) {
          ????????
          if (cmd? == ?exitCommand) {
          ????????????destroyApp(
          false );
          ????????????notifyDestroyed();
          ????????}

          ????}

          }

            對這段代碼,我做一些簡單的解釋:
            1.我們的類implements了CommandListener接口,這個接口需要我們實現commandAction方法,而實現這個接口和方法的目的,就是為了對手機的按鍵做出響應;
            2.在這個程序界面中,我們用到了Form類,在Form中添加了字符串,然后再調用display.setCurrent方法顯示這個Form,這里,display代表了手機的屏幕,而Form是充滿這個屏幕的一個用戶控件;
            3.這個程序用定義了一個Command對象,而通過Form.addCommand方法加入這個Command對象,這樣,在手機的菜單條中就會顯示一個“退出”按鈕,至于顯示在屏幕的左下方還是右下方,那就根據手機而不同了,當我們點擊這個按鈕的時候,就會觸發CommandListener的commandAction方法,我們通過Form.addCommandListener添加監聽器。

            在項目的快捷菜單中點擊運行項目,如下圖:
            12.PNG

            下面是運行效果:
            13.PNG

            按下模擬器的啟動鍵,就可以啟動程序,如下圖:
            14.PNG

            點擊模擬器上的退出鍵,就可以退出程序。

            今天就寫到這里了。現在我們得到的,只是一個能夠在模擬器上運行的簡單程序。我們該如何把它弄到我們的手機上面呢?我們又該如何編寫更加復雜的用戶界面呢?怎么樣才能編寫游戲呢?且看我慢慢寫來。


          評論

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-16 21:17 by 山風小子
          支持,以后我也研究研究游戲編程 :)

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-17 09:40 by BlueBrook
          羨慕,雙核+4G
          我畢設就是做的手機游戲

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-17 11:32 by 三告習習
          “雙核CPU加4G內存的臺式機”
          .........這個要求也夠高了
          期待下文~~~~~~~~

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-17 11:59 by BeanSoft
          Netbeans 開發 Swing 和 J2ME 無人能敵啊, 不知道整死了多少做 J2ME 開發工具的公司.

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-19 11:20 by cjj
          期待后續

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-07-30 16:40 by 小白之家
          經典,這個好,現在的j2me的虛擬手機平臺有漢化版要收費

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-08-01 20:27 by mxp
          看了您這篇文章后,非常受啟發,一直想學學J2ME,這篇文章讓我入門了,謝謝

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2007-08-07 21:36 by Fang.W
          頂,我一直用的是Eclipse,雖然沒有什么不方便。但是還是想用用這個netbeans。

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著[未登錄]  回復  更多評論   

          2008-03-22 16:25 by 小熊
          您對我的啟發太大了,謝謝,真誠的希望您能繼續,為像我一樣的菜鳥引路。再次感謝。

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2008-03-22 22:39 by ralphwho
          very good entry level tutorial. thank you

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2008-03-24 09:06 by Nik_Lu
          感謝您為我指路,我也想了解J2ME

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著[未登錄]  回復  更多評論   

          2008-12-04 17:00 by roy
          支持支持!!學習了~以后把自己的手機好好利用起來

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2009-02-14 13:19 by flyliying
          退出在左邊還是右邊
          public static final Command exitCommand = new Command( " 退出 " ,Command.OK, 1 );

          應該是是這樣寫
          public static final Command exitCommand = new Command( " 退出 " ,Command.EXIT, 1 );

          大家可以試試看

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2009-12-29 10:19 by Wilzo
          感動...
          我就是想找這類型的教程...
          簡單易懂...

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2010-09-14 11:00 by travel
          頂樓主,通過這個可以跑起來的實例,我更感興趣了!

          # re: 使用NetBeans進行J2ME開發(一):別讓程序員的手機閑著  回復  更多評論   

          2014-07-22 18:11 by 小王
          為什么我用BETBEANS IDE運氣 構建成功后 模擬界面很快就消失?
          主站蜘蛛池模板: 和田县| 五莲县| 宁陕县| 柞水县| 安溪县| 长葛市| 沂源县| 鄂托克前旗| 莒南县| 丰镇市| 鄂托克旗| 古浪县| 轮台县| 开江县| 仙桃市| 浦县| 乐平市| 临沂市| 富民县| 海宁市| 那曲县| 达拉特旗| 佛山市| 吉木乃县| 仙游县| 贵阳市| 云龙县| 德化县| 荆州市| 犍为县| 武乡县| 宁晋县| 南皮县| 迁安市| 巩留县| 若羌县| 汨罗市| 施甸县| 会理县| 鱼台县| 泗阳县|