k类。
Networking
提供访问设备通信能力的接口。
Persistence
通过记录管理系统(RMS)API访问用户永久存储。
UserInterface
包括MIDPLCDUI(液晶显示器用户界面)类。
2.4.2MIDlet应用程序
MIDlet即MIDP的应用程序,MIDlet应用程序的核心是MIDlet类。为了创建一个MIDlet,必须从这个虚基类派生出自己的类。表2-2提供了从MIDlet类继承的方法。
表2-2MIDlet类
方法
描述
访问JAR和JAD文件中的属性
StringgerAppProperty(stringkey)
返回JAR和JAD中与key相对应的属性的值。
AbstractvoiddestoryApp(booleanunconditinal)
应用程序管理器在应用程序关闭前,调用这个方法来给我们做一些事情的机会(例如保存状态和释放资源)。
AbstractvoidpauseApp()
在用户暂停游戏时,应用程序管理器调用MIDlet的类方法。
AbstractvoidstartApp()
应用程序管理器调用MIDlet的这个方法,来告诉用户再次开启游戏。
AbstractvoidnotifyDestroyed()
如果游戏者决定退出游戏,可以调用这个方法来通知应用程序管理器。
续表2-2MIDlet类
方法
描述
AbstractvoidnotifyPausrd()
调用这个方法来通知应用程序管理器游戏者已经暂停游戏。
AbstractvoidnotifyRequest()
调用这个方法来告诉应用程序管理器MIDlet要重新开始。
应用程序管理器(ApplicationManager,AM)的作用就是管理MIDlet。本质上来说,MIDlet应用程序只存在两种状态--暂停和运行。MIDlet被创建后默认为暂停状态,当应用程序管理器认为它准备完毕,它会调用startApp方法来通知MIDlet进入运行状态。
2.4.3使用定时器
MIDPAPI包括两个关于定时器的类--Java.util.Timer和Java.util.TimerTast类(如表2-3和2-4所示):
表2-3Java.util.Timer类
方法
描述
Timer()
构造一个新的Timer对象。
Voidcancel()
停止Timer。
Voidschedule(TimeTasktask,,Dared)
把一个任务定时在时间d运行。
Voidschedule(TimeTasktask,DatafirstTime,longperiod)
让一个任务第一次在一个指定的时间运行,然后每隔period毫秒运行一次。
Voidschedule(TimeTasktask,longdelay)
指定一个任务在delay毫秒后运行一次。
Voidschedule(TimeTasktask,longdelay,longperiod)
指定一个任务从delay毫秒连续运行,然后每隔period毫秒运行一次。
VoidscheduleAtFixedRate(timeTasktask,DatefirstTime,longperiod)
指定一个任务从firstTime连续运行,然后以固定间隔period毫秒连续运行。
VoidscheduleAtFixedRate(TimeTasktask,longdelay,longperiod)
指定一个任务在delay毫秒后运行,然后以固定间隔period毫秒连续运行。
表2-4Java.util.TimerTast类
方法
描述
TimerTask()
构造一个新的TimerTask对象。
Booleancancel()
结束该任务。
Abstractvoidrun()
这个方法必须被一个包含Timer时间执行的代码的方法重载。
LongscheduledExecutionTime()
返回任务上一次执行的确切时间。
我们可以通过不同schedule的方法来确定什么时候执行任务,包括在一个指定的时间执行一次和那个时间后按照一个固定的时间间隔连续执行。也可以在一段延迟(单位是毫秒)后执行任务,还可以选择以固定的时间间隔连续执行。
2.4.4网络
MIDP包含对CLDC中的GCF(GenericConnectionFramework),即通用连接框架的支持,MIDP规范只是要区分必须实现HTTP的连接。如果想开发的是基于无线网络的高性能的多人联网游戏,这非常值得考虑应用。目前的情况是,无线网络的传输情况是高延迟以及高丢失率,所以响应时间在50ms的游戏很难实现。通用连接框架使用静态工厂类Connector去创建和返回一个连接。如图2-1
所示是所有类型的类层次图。
图2-1类层次图
图2-1通用连接框架包含丰富的多功能的通信类;但是MIDP只确保支持HttpConnection。
2.4.5使用Connector
通用连接框架设计包括一个超级Connector的概念,这个Connector作为一个支持任何连接类型的工厂,基本上来说,调用Connector类的静态方法open即可,把需要连接的资源的名字作为参数传递过去,这个名字应该采用"协议:地址:参数"的格式。
在代码里将采用HttpConnection类,如表2-5所示:
表2-5HttpConnection类
方法
描述
StaticConnectionopen(Stringname)
构造,打开和返回一个指向一个指定URL的连接。
续表2-5HttpConnection类
StaticConnectionopen(Stringname,intmode)
构造,打开和返回一个连接,连接一个指定资源URL和打开的模式都需要设定。
StaticConnectionopen(Stringname,intmode,Booleantimeouts)
构造,打开和返回一个连接,连接一个指定资源URL和打开的模式都需要设定,同时也有一个参数指定是否需要超时异常。
staticConnectionopenDataInputStream(Stringname)
打开一个连接,然后构造和返回一个数据输入流。
staticConnectionopenDataOutputStream(stringname)
打开一个连接,然后构造和返回一个数据输出流。
staticConnectionopeninputStream(Stringname)
打开一个连接,然后构造和返回一个输入流。
staticConnectionopenOutStream(Stringname)
打开一个连接,然后构造和返回一个输出流。
2.4.6使用HttpConnection
HttpConnection类是一个全功能的HTTP客户端,实用于大多数的网络任务(低延迟)。对于游戏而言,可以用它来按需下载内容(如新的关卡),更新得分,或者实现游戏者之间的通信。表2-6是所有HttpConnection类的可用方法。
表2-6javx.microedition.io.HttpConnection类
方法
描述
longgetData()
获取头中的日期值。
LonggetExpiration()
获取头中的过期时间。
StringgetHeaderFieldkey(intn)
根据索引获取头中的键名。
StringgetHeaderField(intn)
根据索引获取头中的键值。
StringgetHeaderField(Stringname)
获取指定的头文字段的值。
续表2-6javx.microedition.io.HttpConnection类
longgetHeaderFieldData(Stringname,longdef)
按照长日期类型返回指定字段的值,如果该字段不存在就返回def的值。
intgetHeaderFieldInt(Stringname,intdef)
按照整数类型返回指定字段的值,如果该字段不存在就返回def的值。
LonggetLastModified()
返回最后一次更新的时间。
StringgetURL()
返回URL。
StringgetFile()
获取URL中的文件部分。
StringgetHost()
获取URL中的主机部分。
intgetPort()
获取URL中的端口部分。
StringgetProtocol()
获取URL中的协议部分。
StringgetQuery()
获取URL中的查询部分。
StringgetRef()
获取URL中的引用部分。
IntgetResponseCode()
返回HTTP响应状态码
StringResponseMessage()
返回HTTP响应消息(如果存在的话)。
StringgetREquestMethod()
获取连接请求的方法。
VoidgetRequestMethod(Stringmethod)
设置URL请求的方法。可用的类型有GET,POST和HEAD。
StringgetRequestProperty(Stringkey)
获取与指定的键相关联的请求属性值。
VoidsetRequestProperty(Stringkey,Stringvalue)
设定与指定的键相关联的请求属性值。
2.4.7永久性数据(RMS)
开发游戏时,保存数据在J2ME里是用RMS(RecordManagementSystem,记录管理系统)来实现的,可以在Javax.microedition.rms包中找到它,表2-7就是这个包中所有的类的列表。RMS采用记录的方式来保存数据,然后使用唯一的记录号来应用这些数据,成组的数据就被保
上一篇:
JAVAD的网络三维技术(论文和程序)
下一篇:
试题库管理系统毕业论文