<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks
    引言

      在上一篇文章介紹了HelloWorld程序的開發過程,雖然這是一個經典的程序但并不具備任何實質性的功能而且只是在模擬器中仿真運行。經過這么長時間的學習,本文中要向讀者在這段時間的學習有所交代,最起碼應當讓讀者能夠開發出一個具備簡單功能的能夠在真機運行的J2ME手機應用程序,也好以此向周圍的同學、同事炫耀一番。相信贏得些許羨慕的目光應該不是什么難事。好了,閑話暫且不提,先簡單介紹一下本文將要介紹的知識點。

      本文將通過一個簡單的J2ME程序"整蠱專家"的開發向讀者介紹信息框的顯示、命令按鈕的添加、通過文本框與用戶的交互、對命令按鈕的響應以及對所開發應用程序的打包發布等主要內容。最終展現給讀者的將是一個能夠在真機運行的J2ME手機程序。

      程序的設計

      首先,按照上一篇文章介紹的知識創建J2ME項目Test并添加MIDlet到其中。現在就在EclipseMe生成的框架代碼基礎上將下面陰影顯示的功能代碼添加到相應位置:

    package demo;
    import javax.microedition.lcdui.Alert;
    import javax.microedition.lcdui.AlertType;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Display;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.TextBox;
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.midlet.MIDletStateChangeException;
    public class Test extends MIDlet implements CommandListener {
     private TextBox textbox; // Textbox 顯示一條消息
     private Display disp; // 引用MIDlet的Display 對象
     private Command cmdExit; // 設定按鈕用于退出MIDlet
     private Command cmdOK; // 確定按鈕
     private Alert alt; // 信息提示對象
     public Test() {
      super();
      disp = Display.getDisplay(this); // 獲得當前MIDlet的Display對象
      cmdExit = new Command("退出", Command.SCREEN, 1); // 新建兩個控制按鈕
      cmdOK = new Command("閱讀", Command.OK, 1);
      textbox = new TextBox("請輸入待閱項目序號:", "", 40, 0); // 新建文本框
      textbox.addCommand(cmdExit); // 添加控制按鈕
      textbox.addCommand(cmdOK);
      textbox.setCommandListener(this); // 開始偵聽命令
     }
     protected void startApp() throws MIDletStateChangeException {
      alt = new Alert("整蠱專家 V1.0");// 開始運行時顯示版權信息,新建信息框對象
      // 設置顯示字符串
      alt.setString("==== 整蠱專家 V1.0 ====郎銳2004年作版權所有(C) 2004-2005");
      alt.setType(AlertType.INFO); // 設置為普通閱讀信息框
      alt.setTimeout(Alert.FOREVER); // 信息窗口在按下DONE鍵后才能進入下一頁面
      disp.setCurrent(alt, textbox); // 顯示信息窗口
     }
     protected void pauseApp() {}
     protected void destroyApp(boolean arg0){}
     public void commandAction(Command arg0, Displayable arg1)
     {
      if (arg0 == cmdExit) { // 按下退出鍵時停止運行
       destroyApp(false);
       notifyDestroyed();
      }
      if (arg0 == cmdOK) { // 按下閱讀鍵后閱讀對應信息
       TextBox textbox = (TextBox)arg1; // 得到用戶輸入的內容
       String sInfo = textbox.getString();
       if (sInfo.equals("1") || sInfo.equals("2") || sInfo.equals("3") || sInfo.equals("4") || sInfo.equals("5")) { // 顯示項目1的內容
        // 根據所選項目選擇要顯示的內容
        if (sInfo.equals("1")) alt.setString("一兄弟脾氣甚……");
        if (sInfo.equals("2")) alt.setString("豬的四大愿望……");
        if (sInfo.equals("3")) alt.setString("春風里,百花下……");
        if (sInfo.equals("4")) alt.setString("為什么……");
        if (sInfo.equals("5")) alt.setString("昨夜做了……");
        alt.setTitle("您正在閱讀短信" + sInfo); // 設置標題
       }else{
        alt.setString("很抱歉,暫時還沒有您選擇的項目,請重新輸入!");
        alt.setTitle("錯誤警告"); // 設置標題
       }
       alt.setType(AlertType.INFO); // 設置為普通閱讀信息框
       alt.setTimeout(Alert.FOREVER); // 信息窗口在按下DONE鍵后進入下一頁面
       disp.setCurrent(alt, textbox); // 顯示信息窗口
      }
     }
    }

      在講述這段代碼之前首先介紹一下MIDlet的生命周期:一個MIDlet在其生命周期中共有三種狀態,分別是暫停、活動和停止。MIDlet被加載后首先是處于暫停狀態,在J2ME調用startApp()方法后轉入活動狀態。通常情況下應用程序是不必考慮如何控制其運行狀態的,其狀態的切換由手機來決定。例如,在程序運行過程中如果有電話呼入則會自動轉入暫停狀態而無須在與用戶交互后才能做出判斷。最后,當用戶按下手機的取消鍵時,MIDlet將進入停止狀態。

      在Test類的構造函數中首先得到當前MIDlet的Display對象,以便進行界面顯示。隨后通過new操作符新建項目將要用到的命令按鈕、文本框等高級用戶界面類的對象。在創建命令按鈕時,可以通過參數指定所要創建的命令按鈕種類。在TextBox類方法addCommand()將其添加到文本框后需要繼續調用setCommandListener()方法以開始命令的偵聽,否則創建出來的命令按鈕僅僅是個無法響應任何操作的擺設。由于需要處理按鍵,因此在這里必須實現CommandListener接口并處理commandAction方法,該方法的具體實現過程稍后在進行介紹。

      為了在程序開始之初啟動程序封面,以顯示版權信息、軟件介紹等簡介性質的文字或畫面,需要在startApp()方法中添加相應的代碼。這里是通過信息框來實現這一功能的。首先新建一Alert對象,并設置標題、內容信息和信息框類型。通常我們更習慣在按鍵之后再進入下一頁面,為了實現這一效果可以在調用setTimeout()方法時指定FOREVER這一屬性參數。設置完畢后通過Display的setCurrent()方法指定該信息框為當前顯示界面。

      本程序具有用戶交互功能,用戶可以通過輸入要查看短信的序號來閱讀不同的短信內容。為實現該功能就要在commandAction()方法中添加代碼進行處理。由于本程序添加有兩種不同功能的按鍵,因此首先需要對第一個參數進行檢查以區分當前執行的是退出命令還是確定命令。如果按下的是后者,再通過第二個參數得到用戶通過鍵盤在文本框錄入的字符并進行檢測判斷,對于習慣了C++編程的開發人員需要注意,在判斷字符變量是否與其他字符相等時不能使用"=="操作符而要使用String的equals()方法進行判斷。剩下的工作就是再以信息框將用戶需要的短信顯示出來即可,具體實現過程與前述方法類似。


      Eclipse在代碼編寫過程中會動態檢查錯誤,在出現錯誤后,可以將鼠標移到在出錯代碼左側的錯誤圖標上雙擊鼠標,將彈出如上圖所示的更改建議,用戶可以在其上雙擊鼠標接受其建議,在右側浮動窗口顯示的代碼將自動添加到適當的位置。
    運行程序并打包

      代碼編寫無誤后可以先在PC上的模擬器中運行調試,并對出現的問題進行修改,一切無誤后再打包發布。在模擬器的運行過程在上一篇文章已有詳細介紹,這里就不再重復。由于程序即將在真機運行,因此最好使用手機廠商提供的J2ME SDK。下圖為使用SonyErisson J2ME SDK (WTK 1.0.4)和SonyErission_T630模擬器的運行過程截圖:


      在程序列表中選中本程序Test,然后按下Lautch鍵將裝載程序并進入軟件首頁(左2圖),按下Done鍵進入用戶交互界面(左3圖)通過點擊模擬器的數字按鍵錄入要查看的短信序號并按下"閱讀"鍵將顯示相應短信內容(左4圖)按下Done鍵后返回到前一頁面,可以再次輸入其他短信序號繼續閱讀其他短信的內容,直到按下"退出"鍵返回到最開始的界面(左1圖)。


      顯然,編寫的程序并沒有什么問題,可以向真機發布了。在發布時,首先要確保已經添加有對MIDlet的定義。可以在導航器視圖中雙擊"Test.jad"項打開jad編輯器(見上圖)。在編輯器下方窗口切換中選擇Midlets進入Midlet定義窗體,確保有如上圖所示的項目出現,否則添加之。如果需要添加圖標的話,可以指定待使用的圖標,但一定要預先將圖標文件轉換成png格式的文件。




      最后要進行的應用程序打包處理簡單的幾乎難以置信,只需右擊項目并選擇上下文菜單的"J2ME"菜單所彈出的"Create Package"菜單項即可(見上圖)。EclipseMe將自動在項目存放目錄下的deployed文件夾下生成兩個文件,分別是Test.jad和Test.jar。只要通過手機上傳軟件經由數據線、紅外口或是藍牙將Test.jar上傳至手機即可。當然,手機必須是支持Java的才行。如果不清楚是否支持,可查閱手機用戶手冊。

      小結

      到此為止,已經實現了一個真正能夠在手機運行的J2ME程序。雖然最后完成的"整蠱專家"程序功能仍然有限,但是讀者可以發現我們開發出來的軟件與下載得到的各種Java手機程序并沒有本質的差別。通過對其開發過程的剖析可以發現J2ME程序的開發并沒有原先想象的那么神秘與高深。只要投入更多的精力和創意,不難寫出功能更強大、界面更美觀的J2ME程序。目前做到的是J2ME程序的突破,今后需要做的是不斷的提高。在下一篇文章,也就是本系列文章的最后一篇文章,將在此基礎上實現一個圖形化的手機游戲程序。

    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2006-01-12 16:53 草兒 閱讀(198) 評論(0)  編輯  收藏 所屬分類: eclipse
    主站蜘蛛池模板: 国产亚洲av片在线观看16女人| 久久亚洲AV成人无码电影| 国产精品小视频免费无限app| 亚洲日韩国产精品第一页一区| 久久免费视频99| 亚洲久热无码av中文字幕| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久精品国产亚洲αv忘忧草| 天天干在线免费视频| 巨胸喷奶水www永久免费| 精品亚洲成a人片在线观看 | 91在线精品亚洲一区二区| 国产成人啪精品视频免费网| 大地资源在线资源免费观看| 中文字幕无码精品亚洲资源网久久| 亚洲国产免费综合| **真实毛片免费观看| 思思久久99热免费精品6| 亚洲美女aⅴ久久久91| 亚洲成AⅤ人影院在线观看| 67pao强力打造国产免费| 免费福利在线观看| 亚洲国产亚洲片在线观看播放| 亚洲日韩国产成网在线观看| 100000免费啪啪18免进| ssswww日本免费网站片| 亚洲夂夂婷婷色拍WW47| 亚洲一区二区三区四区在线观看| 四虎永久精品免费观看| 国产在线jyzzjyzz免费麻豆| 国产一级一毛免费黄片| 亚洲av永久中文无码精品综合| 久久青青草原亚洲av无码app| 亚洲午夜福利精品久久| 在线免费一区二区| 日本免费一区二区在线观看| 中文字幕免费观看视频| 国产精品亚洲五月天高清| 亚洲日韩国产精品乱-久| 亚洲av鲁丝一区二区三区| 国产亚洲精品激情都市|