`

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程序的开发在不久的将来能很快地流行起来。

本文摘自《现代电子技术》
from http://www.chinaecnet.com/

<!-- google_ad_client = "pub-2416224910262877"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "image"; google_ad_channel = ""; // -->

分享到:
评论

相关推荐

    JAVA手机编程技术.pdf

    JAVA手机编程技术.pdf

    JAVA 手机编程技术

    M IDP 程序真实的运行环境是JAVA 手机, 但他 的开发却是在PC 机上进行的, 因此开发环境一般都 提供仿真器对程序进行测试。 本例子包含2 个M IDP 程序,其中有详细的程序源代码和注释。

    java手机编程技术

    J2ME(JAVA 2 Micro Edition)是用于嵌入式系统的JAVA,他是SUN公司对标准的JAVA版本J2SE做了最大程度的精简后得到的一种JAVA应用程序运行环境,在最简单的情况下他只有几十kB,特别适合在手机、PDA等设备中使用。...

    JAVA手机编程技术下载

    本书简要介绍了Sun公司的J2ME规范,并通过具体例子说明了MIDP程序的设计方法及开发过程。

    通信与网络中的JAVA手机编程技术

    JAVA手机编程技术 林天峰 (温州职业技术学院 计算机系 浙江 温州 325000) 1 引 言 随着通讯技术的发展及手机的普及,人们正在不断地给手机增加新的功能,其中,使手机实现一般只有PC机才具有的功能--下载各种程序并...

    java手机软件开发资料全集

    java手机软件开发资料全集 资料清单: 1、Java手机程式设计入门 ...7、java手机编程教程 8、java手机程序设计入门 9、JAVA手机精品 10、Java手机游戏开发源代码 11、基于Java技术手机移动学习开发研究

    Java2游戏编程.pdf

     你经常看到有人在玩手机游戏吧,那些手机游戏基本上是用Java编写的。Java已经成熟了,它现在是一种开发能够多种平台上运行的中小型游戏的很好方式。本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题...

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南...本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。

    JAVA编程电子书专题下载

    JavaScript实例 Java Applet实例讲解 JavaScript与JScript从入门到精通 Java 2平台安全技术-结构 Java虚拟机规范 JAVA 3D 魔方源代码 Developing Games in Java Java 手机程式设计...

    深入Java Servlet网络编程

    第5章 Java Servlet中的网络编程 5. 1 Java套接字网络编程 5. 1. 1 InetAddress类 5. 1. 2 Socket类 5. 1. 3 给手机发送网上短信息 5. 2 Java网络编程中的高层类 5. 2. 1 URL类 5. 2. 2 URLConnection类 第6...

    从零开始学Java ME手机开发光盘

    全书以无线行业Java技术规范JTWI(JSR-185)为基础,内容涵盖了用户界面设计、事件处理、游戏设计、网络编程、多媒体、本地持久存储、Push注册、无线消息、无线程序发布、安全架构、国际化等主要技术。从编程实战...

    java源码包---java 源码 大量 实例

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    面向对象的编程——Java教案 (jaca 库、java的软件开发技术、附带实例java 的应用程序 电子书文本形式)

    面向对象的编程——Java教案 (jaca 库、java的软件开发技术、附带实例java 的应用程序 电子书文本形式

    基于Java技术手机移动学习开发研究

    初学编程的人进步慢甚至半途而废的主要原因是他们没有软件开发的具体环境。如果一 个实践经验丰富的老师能把一些理论和实践经验通俗地讲出来,并为学员提供一个真实的实 践练习环境,培养他们的编程思想和感觉,组织...

    java源码包4

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

Global site tag (gtag.js) - Google Analytics