J2ME手機程式設計

作者: 吳鵬榮

E-mail: channelisation@hotmail.com

前言

JAVA的一個重要的特性就是跨平台,它允許程式設計師僅需撰寫一次程式碼,便可以在各種不同的平台上執行(例如: windows, linux…),這樣的特性所帶來的好處是不言可喻的。而這種跨平台的特性對於手機上的應用程式開發更是重要,試著想想,每一個手機廠商都有其自己的作業平台,若是有一家軟體公司想要在手機上開發應用程式,那麼便需要針對各家手機平台來開發可以在上面執行的應用程式,其工程之浩大可想而知,再加上手機平台不斷的推陳出新,若是每次有新的手機出來,軟體廠商都必須再為其重新開發一次應用程式,那麼便顯得有些不切實際。因此,J2ME就在這樣的情況下誕生了,手機廠商只要在其作業平台上提供可以執行J2MEJAVA虛擬機器,便可以執行利用J2ME所開發出來的應用程式,這提高了軟體廠商在手機上開發應用程式的意願。

 何謂J2ME

J2ME (Java 2 Platform, Micro Edition)Sun Microsystems所發展出來針對一般的消費性小型設備進行程式開發的工具,由於這些設備的種類繁多,並且之間的特性又大不相同,針對這個問題J2ME引入了二種新的概念,分別是Configuration以及Profile,Configuration主要的目的是針對消費性電子產品的網路連結能力、處裡器速度,記憶體容量等特性為之分類。Configuration針對所使用的裝置,定義了一些較基本的核心類別函式庫,凡是屬於該Configuration的裝置,其上所附的JAVA虛擬機器應該要支援Configuration中所定義的類別函式。目前J2ME已定義了二種Configuration:

1.          CDC (Connected Device Configuration)

適用於較高檔的消費性電子產品,例如互動式電視機上盒、網路電話

2.          CLDC (Connected, Limited Device Configuration)

適用於較低檔的消費性電子產品,例如手機、PDA

 另一方面,雖然Configuration已經將消費性電子產品做了簡單的分類,但是畢竟各種裝置的特性仍然有許多的不同點,例如CLDC雖然包含了手機與PDA,但是手機和PDA的顯示能力卻不完全相同,PDA的顯示螢幕比起手機大的多。因此,J2ME利用Profile再針對各個不同的裝置在做更細部的分類,Profile可以說是在Configuration之上定義另一組額外的類別函式。以手機來說,J2ME便為其定義了MIDP (Mobile Information Device Profile)MIDP針對手機定義了適用於手機的類別函式,例如簡訊的傳送,聲音的處理等。

 在本文中,我們討論的是手機上的J2ME程式開發,因此我們將使用CLDCMIDP,然而因為篇幅有限,我們無法將CLDCMIDP所定義的函式庫一一的作說明,更詳細的MIDP的版本及所支援的函式庫,讀者可以參考J2ME的官方網站:

http://java.sun.com/j2me/

第一個J2ME程式

下載並安裝J2ME Wireless Toolkit

雖然,目前有許多開發程式可以用來開發J2ME的應用程式,但是對於初學者來說,J2ME Wireless Toolkit應該可以算是其中最容易取得的工具(從Sun Microsystems網站上便可以直接下載),因此本文將以J2ME Wireless Toolkit為主。

 在安裝J2ME Wireless Toolkit之前必須先安裝J2SE,若讀者沒有安裝J2SE,可以自行從Sun Microsystems網站上下載,並依照其指示安裝J2SE,若已經安裝過J2SE,則可以省略此步驟

 下載J2SE網址

http://java.sun.com/j2se/

 在安裝好J2SE之後,便可以安裝J2ME Wireless Toolkit,一樣從Sun Microsystems下載,在撰寫這篇文章時,最新版本為J2ME Wireless Toolkit 2.1,所以本文中將以此為操作版本,然而,本文中所提到的程式碼,亦可正常於之前的版本中執行,只是操作畫面會有些許不同,其過程仍是大同小異。

 下載J2ME網址

http://java.sun.com/j2me/

 在下載完畢後便可以開始進行安裝,首先我們必須指定J2SE的所在路徑,本文中的例子,我們將J2SE安裝在C:\j2sdk1.4.2_04

 接下來設定J2ME Wireless Toolkit的安裝位置,若不想更動則直接使用預設值,直接按Next即可。

接著設定J2ME Wireless Toolkit,在程式集中的名稱。

最後,安裝程式會將剛剛使用者所設定的參數顯示在畫面中,若一切正確無誤,則按Next。

 安裝完成。

關於中文化

Sun Microsystems的網站上有提供J2ME Wireless Toolkit的中文化套件,但是筆者在一次的程式撰寫經驗中發現,中文化後的J2ME Wireless Toolkit在有些訊息的顯示上不太正確(訊息有被截斷的情況),因此筆者認為,若非絕對必要,否則不一定要更新中文化套件,沒有更新中文套件並不會影響中文程式的撰寫。

 第一次啟動J2ME Wireless Toolkit

我們可以在程式集中找到剛剛所安裝的J2ME Wireless Toolkit,要啟動J2ME Wireless Toolkit請執行 程式集->J2ME Wireless Toolkit 2.1->KToolbar”。 KToolbarJ2ME Wireless Toolkit最常使用的工具,它可以用來建立專案、編譯專案、以及啟動模擬器來執行我們所撰寫的應用程式。

J2ME Wireless Toolkit中內建四種可供選擇的模擬器

模擬器的操作

簡單的J2ME範例程式

建立專案

在安裝好J2ME Wireless Toolkit之後,我們將撰寫一個簡單的範例程式,以示範如何利用J2ME Wireless Toolkit來撰寫手機上的Java程式。 

首先我們建立一個新專案,啟動KToolBar,按下New Project(建立新專案)之後,會出現下面的畫面,我們必須指定專案的名稱以及MIDlet Class的名稱,在這裡我們要建立的專案名稱為MyFirstProject,而MIDlet ClassHelloWorld,當指定完畢之後便可以按下Create Project建立專案。

在按下”Create Project”(建立專案)之後,會出現一個專案設定畫面,我們可以針對我們的專案做一些細部的設定。在這裡我們使用預設值及即可,所以直接按”OK”。

然後我們會看到主控台出現了一些訊息,其主要的內容是告訴我們,剛剛我們所建立的專案,被放置在什麼位置。

 以文中所建立的專案為例,J2ME Wireless Toolkit為我們建立的相關目錄如表中所示:

專案目錄位於

C:\WTK21\apps\MyFirstProject

Java原始檔

C:\WTK21\apps\MyFirstProject\src

應用程式資源

C:\WTK21\apps\MyFirstProject\res

應用程式函式庫

C:\WTK21\apps\MyFirstProject\lib

程式碼撰寫

J2ME Wireless Toolkit已經為我們建立好專案所需的相關檔案及目錄,接下來我們便可以利用任何我們所喜歡的編輯器來幫助我們編輯程式碼,我在剛剛建立專案時指定了HelloWorld為我們要建立的MIDlet,所以現在我們撰寫一個HelloWorld.java,並將它放置在C:\WTK21\apps\MyFirstProject\srca目錄中。

 HelloWorld.java程式碼內容如下

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

public class HelloWorld extends MIDlet implements CommandListener {

   

    TextBox text;

    private Command enterCommand; // 確定鈕

    private Command exitCommand;  // 離開鈕

    private Display display;          // display代表手機上可顯示的裝置

 

    /*

    HelloWorld的建構子

    */

    public HelloWorld() {

        display = Display.getDisplay(this);

        text = new TextBox("請輸入您的大名", "", 256, 0);

        enterCommand = new Command("確定", Command.SCREEN, 1);

        exitCommand = new Command("離開", Command.SCREEN, 2);

    }

 

    /*

    程式的起始點,其中設定了二個按鈕以及一個用來顯示文字的TextBox

    */

    public void startApp() {

        text.addCommand(enterCommand);

        text.addCommand(exitCommand);

        text.setCommandListener(this);

        display.setCurrent(text);

    }

 

    /*

    當應用程式被暫停時,此方法會被呼叫

    */

    public void pauseApp() {

    }

 

    /*

    當應用程式被關閉時,此方法會被呼叫

    */

    public void destroyApp(boolean unconditional) {

    }

 

    /*

    當使用者按下確定按鈕,或離開按鈕時,此方法被呼叫,其中cmd

    傳入是哪一個按鈕被使用者按下。確定鈕被按下時,程式將顯示歡迎

    訊息。離開紐被按下時,程式將被關閉。

    */

    public void commandAction(Command cmd, Displayable s) {

        if (cmd == enterCommand) {

            text.setTitle("歡迎來到J2ME的世界");

            text.setString("Hi, "+text.getString() +". 很高興認識你.");      

        }else if (cmd == exitCommand) {

            destroyApp(false);

            notifyDestroyed();

        }

    }

}

編譯專案

檔之後,我們便可以利用J2ME Wireless Toolkit幫我們編譯剛剛所撰寫的程式,按下Build將剛剛所編輯的應用程式利用J2ME Wireless Toolkit編譯,若是沒有出現錯誤訊息則表示編譯成功。若是編譯的過程中出現錯誤,則會在主控台中顯示相關的錯誤訊息,使用者必須重新檢查並修正程式中的錯誤,然後重新編譯一次。

執行

若是編譯成功,則可以直接按下Run以執行我們所建立的應用程式,此時J2ME Wireless Toolkit會自動開啟所選擇的模擬器來執行我們剛剛所寫的程式。

執行結果

以下我們秀出程式的執行結果

步驟一

程式一執行,便出現要求使用者輸入姓名的畫面。

 

步驟二

輸入姓名之後,按下Menu會出現確定、離開二個選項,利用上下鍵可以在選單中做選擇,這時候請先按下確定。

 

步驟三

接著會出現歡迎訊息。

 

步驟四

接著使用者欲結束程式,可按下Menu並選擇離開,於是程式便會結束掉。

結語

本文中簡單的介紹了J2ME以及實際下載開發工具並撰寫了一個簡單的範例程式,希望讀這在閱讀了這篇文章之後,能夠對J2ME在手機上的程式開發有初步的認識,若是文章內容有錯誤的地方,或是對文章內容有任何疑問,歡迎來信指教或討論,謝謝。