程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 用Eclipse開發J2ME手機游戲入門講座——J2ME應用程序的仿真機發布

用Eclipse開發J2ME手機游戲入門講座——J2ME應用程序的仿真機發布

編輯:J2ME
第五講 J2ME應用程序的仿真機發布

  引言

  在上一篇文章介紹了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程序的突破,今後需要做的是不斷的提高。在下一篇文章,也就是本系列文章的最後一篇文章,將在此基礎上實現一個圖形化的手機游戲程序。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved