J2ME课程综述Word文件下载.docx

上传人:b****5 文档编号:20904715 上传时间:2023-01-26 格式:DOCX 页数:19 大小:159.11KB
下载 相关 举报
J2ME课程综述Word文件下载.docx_第1页
第1页 / 共19页
J2ME课程综述Word文件下载.docx_第2页
第2页 / 共19页
J2ME课程综述Word文件下载.docx_第3页
第3页 / 共19页
J2ME课程综述Word文件下载.docx_第4页
第4页 / 共19页
J2ME课程综述Word文件下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

J2ME课程综述Word文件下载.docx

《J2ME课程综述Word文件下载.docx》由会员分享,可在线阅读,更多相关《J2ME课程综述Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。

J2ME课程综述Word文件下载.docx

它们的组合取舍形成了具体的运行环境。

Configuration主要是对设备纵向的分类,分类依据包括存储和处理能力,其中定义了虚拟机特性和基本的类库。

已经标准化的Configuration有-ConnectedLimitedDeviceConfiguration(CLDC)和ConnectedDeviceConfiguration(CDC)。

Profile建立在Configuration基础之上,一起构成了完整的运行环境。

它对设备横向分类,针对特定领域细分市场,内容主要包括特定用途的类库和API。

CLDC上已经标准化的Profile有MobileInformationDeviceProfile(MIDP)和InformationModuleProfile(IMP),而CDC上标准化的Profile有FoundationProfile(FP)、PersonalBasisProfile(PBP)和PersonalProfile(PP)。

可选包独立于前面两者提供附加的、模块化的和更为多样化的功能。

目前标准化的可选包包括数据库访问、多媒体应用、蓝牙等等。

二、J2ME平台体系结构

J2ME总共有3层体系。

J2ME的3层体系结构依照各种设备的资源特性,将J2ME技术架构分为简表(Profile)、配置(Configuration)和JavaVirtualMachine(JVM)3层,然后再进一步细分,这使J2ME能够在每一类设备的限制下工作,而同时提供最低限度的Java语言功能性。

1、Java虚拟机(JVM)层

这一层针对设备本地操作系统定制的Java虚拟机的实现,支持特定的J2ME配置,就像使用所有的Java技术一样,J2ME的核心也在一中虚拟机中。

2、配置(Configuration)层

面对的是大量各种不同的小型嵌入式设备,它们在外观和功能上均各不相同。

J2ME将这些设备进行分类,将一些共同提取出来形成适合于某个范畴中设备的规范,称为“配置”。

3、简表(Profile)层

简表层定义了特定系列设备上可用的应用程序编程接口(API)的最小集。

简表在一个特定的配置上面实现。

应用程序时针对特定的简表编写的,因此可以移植到支持该简表的任何设备上。

另外,一个设备可以同时支持多个简表。

用户和开发人员看到最多的就是这一层。

三、J2ME目标设备

1、CDC支持的设备

使用CDC开发的J2ME应用程序的目标设备通常具有以下特征:

·

可供Java平台使用的160到512千字节的总内存

功率有限,常常是电池供电

网络连通性,常常是无线的、不一致的连接并且带宽有限

用户接口混乱,程度参差不齐;

有时根本就没有接口

2、CLDC支持的设备

一些CLDC支持的设备,包括无线电话、寻呼机、主流个人数字助手(/pda/PDA),以及小型零售支付终端。

依照SunMicrosystems,CDC的目标设备通常具有以下特征:

 ·

使用32位处理器

2兆字节或更多可供Java平台使用的总内存

设备要求的Java2“蓝皮书”虚拟机的全部功能

一些CDC支持的设备,包括常驻网关、智能电话和通讯器、PDA、管理器、家用电器、销售网点终端以及汽车导航系统。

四、MIDlet应用程序的生命周期

理解J2ME的体系结构并不像想象的那么容易,我们觉得读更多的资料帮助也不大,我们直接迈向J2ME开发也许会对你解J2ME平台体系结构这个重要的概念有所帮助。

在MIDP中定义了一种新的应用程序模型MIDlet,它是被ApplicationManagementSoftware(AMS)管理的。

AMS负责MIDlet的安装、下载、运行和删除等操作。

AMS控制MIDlet的方法:

startApp()、pauseApp()、destroyApp(boolean);

MIDlet主动请求AMS改变其状态的方法:

resumeRequest()、notifyPaused()、notifyDestroyed()。

在被AMS管理的同时,MIDlet可以和应用管理软件通信通知应用管理软件自己状态的变化,通常是通过方法notifyDestroyed()和notifyPaused()实现的

MIDlet有三个状态,分别是pause、active和destroyed。

在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。

在active状态调用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。

值得一提的是destroyApp(booleanunconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。

在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。

如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。

其状态转化图如图2所示:

五、J2ME、J2SE与J2EE之间的比较

在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用。

Java2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。

1、Java2平台标准版(J2SE)

StandardEdition(标准版)J2SE包含那些构成Java语言核心的类。

比如:

数据库连接、接口定义、输入/输出、网络编程。

2、Java2平台企业版(J2EE)

EnterpriseEdition(企业版)J2EE包含J2SE中的类,并且还包含用于开发企业级应用的类。

EJB、servlet、JSP、XML、事务控制。

3、Java2平台微型版(J2ME)

MicroEdition(微缩版)J2ME包含J2SE中一部分类,用于消费类电子产品的软件开发。

呼机、智能卡、手机、PDA、机顶盒。

他们的关系是:

J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类。

他们的应用场合、API的覆盖范围各不相同。

笼统的讲:

J2SE是基础;

压缩一点,再增加一些CLDC等方面的特性就是J2ME;

扩充一点,再增加一些EJB等企业应用方面的特性就是J2EE。

对J2EE更恰当的说,应该是JAVA2企业开发的技术规范,不仅仅是比标准版多了一些类。

六、J2ME程序设计的几个原则

1、使用面向对象编程

虽然使用面向过程编程可以减小文件的尺寸,但是为了以后维护的方便和利于扩展,还是要使用面向对象编程。

2、使用MVC模式

 将模型、界面和控制分离。

现在很多的程序将三者合一,但是如果你做的程序比较大的话,还是建议你进行分离。

3、自动存储用户设定

使用RMS来存储用户的信息,例如存储用户上次输入的用户名、密码、用户对于系统的设定等,这样不仅可以减少用户的输入,而且对用户友好。

很多程序甚至做了自动登陆等。

4、设置关闭

一些系统设置允许用户关闭,如背景音乐、背景灯显示等。

5、使用线程

将低级用户界面的绘制动作放在一个独立的线程里面去。

6、给定界面

在需要大量时间才能完成的工作时,给用户一个等待界面。

七、课程设计思路

网络开发思路主要是客户端和服务端的设置。

在进行无线网络开发时需注意环境配置:

①将“2013”拷入tomat/webapps②双击tomcat/bin里的startup开启服务器。

现在就详细的讲解网络程序加自定义协议的程序编写:

1、自定协议(最终类或接口)

对自定义动作加以区分,制定自己的协议,如:

登录1,接到1后服务器验证,将验证结果返回:

publicfinalclassMyProtocal{//publicinterfaceMyProtocal

publicstaticfinalbyteLOGIN=0;

//登载

publicstaticfinalbyteLIST=1;

//查询

publicstaticfinalbyteINSERT=2;

//插入

publicstaticfinalbyteOK=3;

publicstaticfinalbyteERROR=4;

}

2、案例

(1)描述:

登录后,出现主菜单,选择主菜单的查询和插入后分别执行相应的功能:

 

图3预测结果

(2)类图:

一个主程序类,一个协议,四个屏显

图4类图结构

(3)核心代码:

客户端:

(以登录为例)

newThread(){

dos.writeByte(MyProtocal.MSG_LOGIN);

dos.writeUTF(nameTextField.getString());

dos.writeUTF(pwdTextField.getString());

dos.flush();

bytems=dis.readByte();

if(ms==MyProtocal.OK){

clientMIDlet.display.setCurrent(mainList);

}

}.start()

服务端:

switch(ms){

caseMyProtocal.LOGIN:

login(dis,dos);

break;

caseMyProtocal.QUEUE:

queue(dis,dos);

caseMyProtocal.INSERT:

insert(dis,dos);

dos.close();

dis.close();

publicvoidlogin(DataInputStreamdis,DataOutputStreamdos){

Stringname=dis.readUTF();

Stringpwd=dis.readUTF();

if(name.equals("

liyi"

)&

&

pwd.equals("

123"

)){

dos.writeByte(MyProtocal.OK);

dos.flush();

else{

dos.writeByte(MyProtocal.ERROR);

}

具体的程序代码:

publicclassClientMIDletextendsMIDlet{

Displaydisplay=Display.getDisplay(this);

LoginFormloginform=newLoginForm("

login"

this);

publicClientMIDlet(){

//TODOAuto-generatedconstructorstub

}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{

//TODOAuto-generatedmethodstub

protectedvoidpauseApp(){

protectedvoidstartApp()throwsMIDletStateChangeException{

display.setCurrent(loginform);

publicclassInsertFormextendsFormimplementsCommandListener{

MainListmainList;

ClientMIDletclientMIDlet;

CommandbackCommand=newCommand("

back"

Command.EXIT,1);

CommandinsertCommand=newCommand("

insert"

Command.SCREEN,1);

TextFieldscoreTextField=newTextField("

score:

"

"

10,TextField.ANY);

publicInsertForm(Stringtitle){

super(title);

this.addCommand(backCommand);

this.addCommand(insertCommand);

this.setCommandListener(this);

publicvoidsetInsertData(MainListmainList,ClientMIDletclientMIDlet){

this.append("

welcom"

+LoginForm.name+"

pleaseinsert:

);

this.append(scoreTextField);

this.mainList=mainList;

this.clientMIDlet=clientMIDlet;

publicvoidcommandAction(Commandc,Displayabled){

if(c==backCommand){

clientMIDlet.display.setCurrent(mainList);

}

else{

newThread(){

publicvoidrun(){

try{

HttpConnectionhc=

(HttpConnection)Connector.open("

http:

//localhost:

8080/2013/ServerHttpServlet"

Connector.READ_WRITE);

hc.setRequestMethod(HttpConnection.POST);

DataOutputStreamdos=newDataOutputStream(hc.openOutputStream());

dos.writeByte(MyProtocal.INSERT);

dos.writeUTF(scoreTextField.getString());

dos.flush();

DataInputStreamdis=newDataInputStream(hc.openInputStream());

bytems=dis.readByte();

if(ms!

=MyProtocal.OK){

Alertalert=newAlert("

InsertRack"

alert.setType(AlertType.ERROR);

alert.setTimeout(Alert.FOREVER);

alert.setString("

没有插入成功"

clientMIDlet.display.setCurrent(alert,InsertForm.this);

}

else{

alert.setType(AlertType.CONFIRMATION);

插入成功"

}catch(IOExceptione){

e.printStackTrace();

}

}.start();

}

publicclassLoginFormextendsFormimplementsCommandListener{

TextFieldnameTextField=newTextField("

name:

TextFieldpwdTextField=newTextField("

pwd:

CommandloginCommand=newCommand("

staticStringname=null;

staticStringpwd=null;

publicLoginForm(Stringtitle,ClientMIDletclientMIDlet){

mainList=newMainList("

main"

Choice.EXCLUSIVE,newString[]{"

查询"

插入"

},null,clientMIDlet);

this.append(nameTextField);

this.append(pwdTextField);

this.addCommand(loginCommand);

if(c==loginCommand){

HttpConnectionhc=

dos.writeByte(MyProtocal.LOGIN);

dos.writeUTF(nameTextField.getString());

dos.writeUTF(pwdTextField.getString());

DataInputStreamdis=newDataInputStream(hc.openInputStream());

System.out.println("

con:

+ms);

if(ms==MyProtocal.OK){

//将合法的用户名和密码保存起来

name=newString();

name=nameTextField.getString();

pwd=newString();

pwd=pwdTextField.getString();

//跳转到主界面

clientMIDlet.display.setCurrent(mainList);

}

//TODOAuto-generatedcatchblock

}

publicclassMainListextendsListimplementsCommandListener{

CommandgoCommand=newCommand("

go"

Que

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1