JAVA手機編程技術

JAVA手機編程技術
林天峯
(溫州職業技術學院 計算機系 浙江 溫州 325000)

摘 要:簡要介紹了SUN公司的J2ME規範,並通過具體例子說明了MIDP程序的設計方法及開發過程。

中圖分類號:TP312JA 文獻標識碼:B 文章編號:1004-373X(2003)09-057-04

1 引 言

隨着通訊技術的發展及手機的普及,人們正在不斷地給手機增加新的功能,其中,使手機實現一般只有PC機才具有的功能--下載各種程序並運行,是目前手機發展的一個重要方向。爲此,人們提出了各種各樣的解決方案,其中基於JAVA的J2ME方案無疑是最引人注目的。

JAVA語言由於其平臺無關、開放、網絡功能強、面向對象、安全等特點,一經SUN公司提出,就隨着Internet的發展而風靡全世界,在國外已成爲軟件開發人員的必修語言。特別是他的"一次編寫、到處運行"的跨平臺優點,對於手機領域來說更具有重要的意義。因爲目前手機的種類繁多,各種廠商都有自己的標準,如何使他們能運行同一種標準的程序成爲必須要解決的問題。採用JAVA語言後,各種手機只要實現JAVA虛擬機(JVM)就可以運行JAVA程序,這種方法可以說是目前情況下最爲理想的一種解決方案。

J2ME(JAVA 2 Micro Edition)是用於嵌入式系統的JAVA,他是SUN公司對標準的JAVA版本J2SE做了最大程度的精簡後得到的一種JAVA應用程序運行環境,在最簡單的情況下他只有幾十kB,特別適合在手機、PDA等設備中使用。手機廠商如果在自己的手機中實現了J2ME規範,就可以從網絡下載並運行JAVA程序,從而大大擴展了手機的功能。鑑於JAVA在Internet上取得的巨大成功,我們有理由相信,J2ME能夠把這種成功延伸到手持設備領域,爲將來的手機和互聯網融爲一體提供有利的條件。

JAVA手機的出現也給軟件行業提供了新的機遇,能否給JAVA手機提供足夠多的軟件資源是關係到其能否推廣的重要因素之一。本文對J2ME構架做一個簡單的介紹,並通過一個具體的程序例子來說明JAVA手機程序的特點及開發過程。

2 J2ME概述

J2ME是一種新的、非常小的JAVA應用程序運行環境,他所定義的構架主要用於在手持式設備上推廣使用JAVA技術。SUN公司將爲各種硬件規模的設備提供合適的配置,這些配置包括虛擬機、核心類庫及API。目前,J2ME定製了2種配置:CLDC(Connected Limited Devices Configuration)和CDC(Connected Device Configuration)。其中,CLDC是爲手機等CPU和內存資源遠低於標準JAVA要求的設備所提供的一種配置,他是對JAVA標準版本做了最大程度的縮減後得到的,其虛擬機和核心類庫多於100kB。CDC配置主要用於擁有更多資源的下一代設備。

CLDC配置給各種手持設備提供了能運行JAVA程序的一種環境,但開發者還很難在這種環境下開發程序,首先因爲CLDC核心庫提供的是低級API,不適合直接用於構建應用程序;其次,手持設備的系統結構千差萬別,很難保證應用程序的圖形界面、網絡等功能的移植性。因此,爲了進一步增強J2ME的功能,SUN公司允許設備供應商在實現CLDC的基礎上再爲自己的設備提供專門的高級API及程序管理方法,即PROFILE,以簡化應用程序的開發,使程序有更好的移植性。同時,SUN公司還與50多家知名的移動設備製造商及軟件開發商一起,制訂了專門用於手機等移動信息設備的PROFILE--MIDP (MobileInformation Device PrOfile),由於MIDP提供了編寫圖形界面、網絡程序的統一規範,並實現動態、安全的程序管理方法,因此得到了諾基亞、摩托羅拉、西門子等主要手機廠商的支持,紛紛推出了基於MIDP的JAVA手機。

與APPLET相似,MIDP程序也稱爲MIDlet,他必須要繼承一個特定的類--MIDlet,這樣MIDlet管理者才能控制他的運行。這個類包含了startApp,pauseApp,destoryApp三個用戶可以重載的方法,分別在MIDlet進入運行狀態、停止運行、退出時調用。

MIDP程序的圖形接口相對於標準JAVA的AWT接口要簡單得多,他分爲低級API和高級API。低級圖形API使開發者能更直接地控制屏幕顯示和鍵盤輸入,他基於抽象類Canvas,一般用於編寫遊戲程序,他的可移植性要由開發者自己保證。高級圖形API能在不同設備之間有很好的可移植性,但開發者能調整的餘地也相應地很小,他基於抽象類Screen,並有
Alert,Form,List,TextBox四個具體的子類,這4個子類分別表示警示框、表單、列表框、文本輸入框。另外,高級API還提供了許多圖形組件,包括Command,ChoiceGroup, DateFie1d, Gauge, ImageItem,StingItem,TextField等,他們都可以添加到A1ert和
Form中。有些圖形組件還提供了與AWT相似的事件及事件響應處理方式。

MIDP程序一般要和各種資源文件一起壓縮成一個jar文件。發佈時,還需要有一個擴展名爲jad的描述文件,他包含了MIDP程序的名稱、版本、jar文件的位置及大小等信息。JAVA手機首先要訪問的是描述文件,再根據描述文件的信息把MIDP程序安裝到本手機,然後才能運行。

3 開發實例

MIDP程序真實的運行環境是JAVA手機,但他的開發卻是在PC機上進行的,因此開發環境一般都提供仿真器對程序進行測試。各種手機廠商都有自己的開發、測試環境,下面介紹的例子程序,是在SUN公司的MIDP實現中調試通過的。

3.1 程序功能

本例子包含2個MIDP程序,第1個程序運行時要求用戶輸入姓名,並選擇性別,然後程序根據性別和當前時間向用戶輸出一句問候語。第2個程序運行時讓用戶選擇圖片名稱,然後把這幅圖片在屏幕上顯示出來。這2個MIDP程序由同一個描述文件描述。

3.2 程序源代碼及註釋

3.2.1 第1個MIDP程序(samplel.java)

import javax.microedition.midlet.MIDlet;

import javax.microedition.1cdui.*;

import java.util.*;

//任何MIDP程序都要繼承MIDlet類,爲了處理按鈕命令,還要實現了CommandListener接口

public class samplel extends MIDlet implements CommandListener

{

private TextBox input; //聲明文本輸入框

private Form select; //聲明表單,用於放置各種圖形組件

private Alert output //聲明警示框

Command cfl,cf2,ct,ca; //聲明各種命令按鈕

ChoiceGroup sex; //聲明選擇框

Display display=null; //聲明屏幕顯示對象

public samplel()

{

input =new TextBox("請輸入您的姓名:",null,8,TextField.ANY); //創建文本輸入框

ct=new Command("OK",Command.SCREEN,1); //創建按鈕ct

input.addCommand(ct); //把按鈕加到文本輸入框

input.setCommandListener(this);//設置按鈕事件處理類

select=new Form("請選擇性別:"); //創建表單

String[]str={"男","女"};

sex=new ChoiceGroup(null,ChoiceGroup.EXCLUSIVE,str,null);

//創建單選框,

select.append(sex) //把單選擇框加入表單

cfl=new Command("OK",Command.SCREEN,1);

//創建2個按鈕cf1和cf2

cf2=new Command("回退",Command.BACK,2);

select.addCommand(cf1); //把2個按鈕加到表單

select.addCommand(cf2);

select.setCommandListener(this) //設置按鈕事件處理類

output=new Alert("問候;","您好1",null,null);//創建警示框

output.setTimeout(Alert.FOREVER);//設置超時爲永遠

ca=new Command("退出",Command.EXIT,1);//創建按鈕ca

output.addCommand(ca); //把按鈕ca加到警示框

output.setCommandListener(this); //設置按鈕事件處理類

}

public void startApp() //該方法在該MIDlet得到執行權時調用

{

if(display==null)

display=Display·getDisplay(this);

//從系統得到這個MIDlet的屏幕顯示對象

display·setCurrent(input);//把文本輸入框input顯示在屏幕

}

public void pauseApp() {}//該方法在該MIDlet失去執行權時調用

public void destroyApp(boolean unconditional)

//該方法在該MIDlet退出時調用

{

input=null; output=null;select=null;

}

//commandAction方法是CommandListener接口中定義的按鈕事件處理方法

public void commandAction(Command c,Displayable d){

if(c==ct) //如果按了ct按鈕

display.setCurrent(select); //則把表單select顯示在屏幕

if(c==cfl) { //如果按了cfl按鈕

Calendar rightNow = Calendar.getInstance();//得到當前時間

int ti=rightNow.get(Calendar.HOUR_OF_DAY);

//得到當前時間的小時數(24小時制)

int indx=sex.getSelectedIndex();

//得到用戶在單選框中所選的項目號

String helo= null;

String name=input·getString();

//得到用戶在文本框中輸入的字符串

//以下4句根據ti和indx的值構建不同的字符串helo

if(ti>=12&&indx==1)helo="上午好!"+name+

"小姐";

if(ti>=12&&indx==0 helo="上午好!"+name+

"先生";

if(ti<12&&indx==1) helo="下午好!"+name+

"小姐";

if(ti<12&&indx==0 helo="下午好!"+name+

"先生";

output.setString(helo);//在警示框中加入字符串helo

display·setCurrent(output);//把警示框output顯示在屏幕

}

if(c==cf2 //如果按了cf2按鈕

display.setCurrent(input);//則把把文本輸入框input顯示在屏幕

if(c==ca) { //A0果按了ca按鈕,則調用destroyApp方法退出

destroyApp(true);

notifyDestroyed();
}

}

}

3.2.2 第2個MIDP程序(sample2.java)

import javax.microedition.midlet.MIDlet;

import javax.microedition.1cdui.*;

public class sample2 extends MIDlet implements

CommandListener
{

private Form form;

private List list' //聲明列表框

Command cl=null;

Display display=null;

String[]dd={"圖像1","圖像2","圖象3"};

public sample2()

{

list=new List("Test List,Choice.EXCLUSIVE,dd,null);

cl=new Command("OK",Command.SCREEN,1);

list.addCommand(cl);

list.estCommandListener(this);

}
public void startApp()

{

display=Display·getDisplay(this);

display·setCurrent(1ist);

}
public void pauseApp() {}

public void destroyApp(boolean unconditional)

{ list=null; }

public void commandAction(Command c,Displayable d)
{

Image aa=null; //聲明圖像對象aa

if(c==cl) { //用戶按了cl按鈕

int i=list·getSelectedIndex();

//得到用戶在列表框中所選的項目號

try{

//創建圖象對象,圖象文件爲tl.png,t2.png

或t3.png,要和類一起壓縮在jar包中

aa=Image.createImage("/t"+(new Integer(i+l))

.toString()+".png");
}

catch(Exception e){}

Form f=new Form("Test"); //創建表單f

f.append(aa); //在表單中加入圖像

display·setCurrent(f);//把表單顯示在屏幕上

}

}

}
3.2.3 描述文件內容(sample.jad)

MIDlet-1;Hello,,samplel

//聲明第1個MIDlet程序,顯示名爲Hello,類名爲samplel

MIDlet-2:Image,,sample2

//聲明第2個MIDlet程序,顯示名爲Image,類名爲sample2

MIDlet-Description:Sample application //對MIDlet的描繪

MIDlet-Jar-Size:11640

//Jar包的字節數,要根據實際情況修改

MIDlet-Jar-URL:sample.jar

//Jar包的位置及名字,位置省略時表示與jad文件在同一位置

MIDlet-Name:MySamples //MIDlet的名字

MIDlet-Vendor:Sun Microsystems //供應商名字

MIDlet-Version:1.0 //MIDlet版本

3.3 開發過程(WindOWS 2000平臺下)

(1)從SUN公司的網站下載MIDP2.0版(http:

va.sun.com/prOducts/midp),並解壓到c:\midp2.0fcs

(2)從SUN公司的網站下載JAVA標準版開發工具JDKl.3.1,安裝在c:\jdkl.3

(3)建一工作目錄,並把上述3個文件存人該目錄

(4)另外再找3個圖像文件,轉化爲png格式後以

tl.png,t2.png,t3.png的名字存入工作目錄

(5)進入MS-DOS方式,轉入工作目錄,設置以下環境變量:

set MIDP_HOME=c:/xmidp2.Ofcs

set PATH=c:/jdkl.3\bin;c:/midp2.Ofcs\bin

set classpath=c:/midp2.Ofcs\classes


(6)編譯2個JAVA文件:

javac *.java

(7)用以下命令預先檢查2個類:

preverify-d.sample1

preverify-d.sample2

(8)把有關文件打成1個包:

jar-CVf sample.jar *.pag

(9)在仿真器中運行:

midp-C1asspath.sample.jar-descriptor sam
ple.jad

在完成仿真後,可以把sample.jadd和sample.jad放在某一網站,並用以下命令測試:

midp-install http://<網絡地址及路徑>/sample.jad

//下載並安裝

midp-run 1 //運行,1表示所安裝的第1個MIDlet

注:①網站的Web服務器要把jadd文件的MIME類型設爲text/Vnd.sun.j2me.app-descriptor,jar文件的MIME類型設爲applicatiOn/java-archive;

②若sample.jad和sample.jar放在不同位置,則sample.jad中的MIDlet-Jar-URL屬性要相應修改;

③可以輸入midp命令,然後用圖形界面進行操作。

4 結 語

MIDP API還提供了HttpConnection類,利用他可以很方便地與互聯網的網站進行交互,從而編寫出功能很強的網絡程序。隨着JAVA手機的普及,迫切需要大量的應用程序資源,各大手機廠商也給開發者提供了非常方便的開發工具,相信MIDP程序的開發在不久的將來能很快地流行起來。

發佈了98 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章