计算机网络毕业设计(论文)-基于J2ME的通信簿程序设计.doc_第1页
计算机网络毕业设计(论文)-基于J2ME的通信簿程序设计.doc_第2页
计算机网络毕业设计(论文)-基于J2ME的通信簿程序设计.doc_第3页
计算机网络毕业设计(论文)-基于J2ME的通信簿程序设计.doc_第4页
计算机网络毕业设计(论文)-基于J2ME的通信簿程序设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

陕西师范大学网络教育学院毕业论文(设计)论文题目 姓 名 学 号 专 业 批次/层次 指导教师 学习中心 基于j2me的通信簿程序设计张三(陕西师范大学网络教育学院,西安,710062)摘要:目前个性化的智能信息产品如移动电话、机顶盒、智能卡和掌上电脑等已经越来越普及。由于这些设备本身的特点,开发者面临平台差异性大,难于移植等诸多困难,j2me的出现可以有效地解决这些难题。j2me是一种把java语言应用于嵌入式系统的软件开发模式,具有java技术中的很多优点,非常适合移动设备应用程序的开发。论文首先介绍了j2me体系结构及其相关技术,接着介绍如何使用j2me开发一个具有添加、删除、修改、查询四个基本功能的手机通信簿管理系统,并且给出了j2me程序开发的流程以及基本的编程技术。通过此通信簿管理系统的开发过程表明,使用j2me开发移动应用程序具有编程简单、移植性强等特点,因此j2me技术的应用将会越来越广泛。关键词:midpj2me rms 手机通信簿1 前言1.1 无线网络概述如今,随着internet和移动通信技术的结合,无线网络技术呈现出飞速发展的态势。什么是无线网络呢?所谓无线网络,就是利用无线电波作为信息传输的媒介构成的无线局域网,与有线网络的用途十分类似,最大的不同在于传输媒介的不同,它利用无线电技术取代网线。有线网络在某些场合要受到布线的限制,布线、改线工程量大、线路容易损坏、网中的各节点不可移动,对正在迅速扩大的连网需求形成了严重的瓶颈阻塞。无线网络wlan就是为了解决有线网络以上问题而出现的。通常用于无线网络的设备包括便携式计算机、台式计算机、手持计算机、个人数字设备 (pdas)、移动电话等。无线技术应用非常广泛,例如,手机用户可以使用移动电话访问的基站连接到internet 中。在家中,用户可以连接桌面设备以同步数据发送文件。这些设备给我们的生活带来很大的变化,而且发挥着越来越重要的作用。同时,由于internet的飞速发展使人们越来越依赖internet上可以得到的信息,人们不再满足于手机、pda等设备出厂时所带有的固定的有限功能,而是希望像计算机一样,能够方便的为手机、pda等小型消费类和嵌入式设备安装各种需要的应用软件,而不是重新购买新的设备。1.2 开发无线应用的困难由于小型消费类和嵌入式设备自身的特点,如:种类繁多、计算能力有限,内存有限、输出、输入设备的特殊性,使得无线应用开发与桌面或企业计算应用开发有很大的不同1。对桌面和企业计算应用来说,开发平台通常与部署环境相同,可以通过高速有线网络与应用系统建立联系。但无线设备的情况正好与之相反,在过去很长一段时间里,无线设备都处于处理器性能低下,内存和图形用户接口资源有限、网络连接速度慢而且不可靠的状况中。目前,在针对无线设备的应用开发时,开发者面临三个主要问题:(1) 开发工具的适用性(2) 实际的无线测试环境(3) 可靠的和可伸缩的服务支持造成这些问题的部分原因是缺少针对无线设备的一致性的应用开发环境,以及缺少适当的无线应用基础设施。尽管无线应用开发有诸多困难,但是无线应用开发仍然取得到了飞快的发展,并且随着j2me开发平台的发布,使很多问题得到了较好的解决。1.3 无线应用开发平台简介brewbinary runtime environment for wireless,即无线二进制运行环境,是高通公司2001年推出的基于cdma网络“无线互联网发射平台”上增值业务开发运行的基本平台2。相对java,brew是一个更底层的技术。 brew提供一个高效、低成本、可扩展和熟悉的应用程序执行环境(aee),着重开发可无缝植入任何实际手持设备的应用程序。制造商和开发人员可以随时对运行环境进行扩展,提供应用程序需要的各种附加性能模块,如无线互联网发射平台中包含的多媒体、多种连接方式、位置服务、用户界面、网络等功能套件。brew提供的功能环境就好像pc机上的操作系统一样,可以通过服务提供商下载指定类型的应用程序或游戏。同时,通过brew接口功能,供应商可以提供成套的完整的资讯、商务、娱乐功能。该平台虽然功能很多但目前还不是很成熟,而且主要是用c语言来开发,只能工作在cdma网络,据统计,全球34家运营商采用了java ,而只有8家运营商采用brew,应用范围相对较小。目前在移动领域广泛使用的开发平台是sun开发的j2me(java 2 micro edition),即用于嵌入式系统的java。j2me技术由一个虚拟机kvm(k virtual machine)和一组api组成,这组api适合于为消费和嵌入式电子设备提供经过剪裁的运行环境2。kvm虚拟机本身仅仅需要40-80kb内存、20-40kb动态内存(堆),能够运行在16位25mhz处理器上。j2me为移动互联引入了一种新的模型,即允许手机可以从互联网上下载各种应用程序,并在手机上创造可执行环境离线运行这些程序。作为java技术在移动电话等小型设备的版本,它针对屏幕、电能和内存等资源有限的移动设备进行了优化和定义,为了解决无线设备多样化的矛盾,sun依照各种设备的资源特性将j2me技术架构分为javavirtual machine(jvm)、配置(configuration)和简表(profile)三层,然后再进一步细分,这使j2me能够在每一类设备的限制下工作,而同时提供最低限度的java语言功能性。brew和j2me是目前主要的无线应用开发平台,除了这两种还有e、symbian、windows mobile、rfgen等无线应用开发平台在此就不多介绍了。1.4 无线应用的领域及发展前景无线技术在我们的生活中发挥越来越重要的作用,给我们的生活带来了很大的便利,其中应用最广泛,与我们最紧密相关的就是手机方面的应用了。现在很难找到一款不支持java的手机,因为手机现在不只作为通话的工具,而且已渐渐向娱乐工具发展,甚至是商务办公的工具。无线网络和无线设备的发展给无线设备上的软件开辟了广阔的前景,也许不久的将来人们在出差或是旅游时能够利用手机进行联网游戏,或者通过手机访问和享用internet服务。1.5 课题来源以及研究的主要内容随着internet和移动通信技术的结合,无线internet技术呈现出飞速发展的态势。无线internet技术经历了wap技术之后,出现了一系列的无线接入标准。如802.11、802.11 a / b /g、802.16、802.20、bluetooth、红外线、gprs、cdma 1x、3g等。由于移动接入设备的种类繁多,导致无线终端设备的硬件、os、应用平台和应用软件各不相同。因此具有移植性好、超越平台差异的技术j2me就应运而生。本项目是陕西师范大学校级重点科研项目(无线网络自适应安全体系结构)的子任务之一。本文在介绍java的基础上,详细论述j2me体系结构的系统构成,通过设计和开发基于j2me的通信簿管理系统,讲述j2me应用开发的相关编程技术。 2 java语言简介2.1 java语言简介随着internet与www的兴起和不断发展,需要开发许多大型软件系统,如何简化这些大型系统的开发、设计和维护,使系统具有灵活性、可移植性和互操作性,成为软件开发必须考虑的问题。美国sun microsystems公司于1995年5月正式发布的程序设计语言java的诞生正是应允了这个要求。java语言有着很好的网上移植性、安全性,并且在编程难度上比c/c+语言简单,是目前软件设计中极为健壮的编程语言,特别适用于网络程序的开发。java给开发人员带来的最大好处就是“一次编译,处处运行”3。为什么java语言这么受欢迎呢?因为它具有以下特点4:(1) 简单性(simple):java是个精简的系统,不需要强大的硬件环境便可以很好地运行。java的风格和语法类似于c+,从某种意义上讲,java语言是c及c+语言的一个变种,因此,c+程序员可以很快就掌握java编程技术。java摒弃了c+中容易引发程序错误的地方,如多重继承、运算符重载、指针和内存管理等,java语言具有支持多线程、自动垃圾收集和采用引用等特性。java提供了丰富的类库,方便用户迅速掌握java。(2) 面向对象(object oriented):面向对象可以说是java最重要的特性。java语言的设计完全是面向对象的,它不支持类似c语言那样的面向过程的程序设计技术。所有的java程序和applet均是对象,java支持静态和动态风格的代码继承及重用。(3) 分布式(distributed):java包括一个支持http和ftp等基于 tcp/ip协议的子库。因此,java应用程序可凭借url打开并访问网络上的对象,就像访问本地文件一样简单方便。java的分布性为实现在分布环境尤其是internet下实现动态内容提供了技术途径。(4) 健壮性(robust):java是一类强类型语言,它在编译和运行时要进行大量的类型检查。类型检查帮助检查出许多开发早期出现的错误。java自己操纵内存减少了内存出错的可能性。java的数组并非采用指针实现,从而避免了数组越界的可能。java通过自动垃圾收集器避免了许多由于内存管理而造成的错误。java在程序中由于不采用指针来访问内存单元,从而也避免了许多错误的发生。(5) 结构中立(architecture neutral):作为一种网络语言,java编译器将java源程序编译成一种与体系结构无关的中间文件格式。只有有java运行系统的机器都能执行这种中间代码。从而使同一版本的应用程序可以运行在不同的平台上。(6) 安全性(secure):作为网络语言,安全是非常重要的。java的安全性可从两个方面得到保证。一方面,在java语言里,像指针和释放内存等 c+功能被删除,避免了非法内存操作。另一方面,当就java用来创建浏览器时,语言功能和一类浏览器本身提供的功能结合起来,使它更安全。java语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。另外,java拥有多个层次的互锁保护措施,能有效地防止病毒的入侵和破坏行为的发生。(7) 可移植(portable):java与体系结构无关的特性使得java应用程序可以在配备了java解释器和运行环境的任何计算机系统上运行,这成为java应用软件便于移植的良好基础。但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。java通过定义独立于平台的基本数据类型及其运算,使java数据得以在任何硬件平台上保持一致,这也体现了java语言的可移植性。还有java编译器本身就是用java语言编写的,java运算系统的编制依据posix方便移植的限制,用ansic语言写成,java语言规范中也没有任何“同具体实现相关”的内容,这说明java本身也具有可移植性。同时java语言的类库也具有可移植性。(8) 解释的(interpreted):java解释器(运行系统)能直接对java字节码进行解释执行。链接程序通常比编译程序所需资源少。(9) 高性能(high performance):虽然java是解释程序,但它具有非常高的性能。另外,java可以在运行时直接将目标代码翻译成机器指令。(10) 多线程(multithreaded):线程有时也称小进程,是一个大进程里分出来的小的独立运行的基本单位。java提供的多线程功能使得在一个程序里可同时执行多个小任务,即同时进行不同的操作或处理不同的事件。多线程带来的更大的好处是具有更好的网上交互性能和实时控制性能,尤其是实现多媒体功能。(11) 动态性(dynamic)java的动态特性使其面向对象设计方法的发展。它允许程序动态地装入运行过程中所需要的类,而不影响使用这一类库的应用程序的执行,这是采用c+语言进行面向对象程序设计时所无法实现的2.2 输入输出流本文中开发的通信簿管理系统将要用到这部分知识,在此我们对其进行简单介绍。输入输出是程序设计中的一个重要内容。任何程序都需要有数据输入,对输入的数据进行运算后,再将数据输出。在面向对象的程序设计语言中,用数据流来实现输入和输出。数据流是指一组有序的、有起点和终点的字节集合。2.2.1 输入流和输出流流是一个很形象的概念,当程序需要读取数据时,就会开启一个通向数据源的流,这个源可以是文件、内存、或是网络连接,则这就是输入流(inputstream)。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流,这就输出流(outputstream)。java中的流分为两种,一种是字节流,另一种是字符流,分别用四个抽象类来表示:inputstream,outputstream,reader,writer。java中其他多种多样变化的流均是由它们派生出来的。2.2.2 标准输入输出标准输入输出是指在命令行方式下的输入输出方式。用键盘输入数据是标准输入(stdin),以屏幕为对象的输出是标准输出(stdout)。还有以屏幕为对象的标准错误输出(stderr)。system.in:in是字节输入流inputstream的对象,其中有read方法从键盘读入数据。system.out:out是printstream的对象,其中有print和println方法向屏幕输出数据。这两个方法支持任何类型的数据输出,方法println在输出数据后再输出一个回车符。system.err和system.out一样向屏幕输出错误信息。2.2.3 字节流java中的字节流是用于处理字节的输入和输出的,包括读写二进制数据等方面的内容。我们先来看下面两个图:图1 inputstream类结构图图2 outputstream类结构图从图1中可以看出,inputstream是所有字节输入流的祖先,而图2中的outputstream是所有字节输出流的祖先。它们都在java.io包中。2.3 java虚拟机(java virtual machine,即jvm)java虚拟机(jvm)是可运行java代码的假想计算机。只要根据jvm规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何java代码能够在该系统上运行5。java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。java虚拟机首先翻译java源程序为字节码(字节码是与平台无关的虚拟机的机器指令。),然后执行翻译所生成的子节代码,属于先解释后执行的方式,它类似一个小巧而高效的cpu。java字节代码运行有两种方式:解释方式和即时编译。对于有些程序而言,采用解释方式执行程序,运行速度会很慢。为了提高速度,java为每个系统都提供了可以直接把字节码文件编译成可执行的映像文件的变压器,java把这类编译器称为即时编译器(jit),它们被捆绑在一些web浏览器中。java的面向网络的核心就是java虚拟机,它支持java面向网络体系结构三大支柱的所有方面:平台无关性、安全性和网络移动性。3 j2me简介与开发工具3.1 java 2 平台的三种版本java的早期版本称为jdk,sun公司在1.2版之后将其改名为java 2,java 2平台的发布被称为是java发展史的新里程碑,目前社会上流行的很多java教程都是基于java 2技术的。java 2平台有三个不同的版本:j2se,j2ee,j2me,其比较如表1所示。每个版本针对不同的应用开发者和不同的运行时环境jre(java runtime environment) 6。j2se(java 2 standard edition,java2平台标准版)是java2平台中最基本的成员,是一组针对传统桌面应用的应用编程接口和运行时环境。j2se使用java hotspot虚拟机来提高其性能,其类库包含了java语言的所有特性。j2ee(java 2 enterprise edition,java 2平台企业版)是j2se的扩展集,主要用于在服务器端开发可伸缩、可迁移、以数据库为核心的企业应用。它也使用java hotspot虚拟机。j2me(java 2 micro edition,java2平台微型版 )定义了一组针对嵌入式设备和消费电子设备的api和运行时环境。嵌入式设备包括无线手持设备如手机、pda、电视机顶盒等。因为这些设备内存和处理器的限制,j2me所运行类库较小。j2me是一种把java语言应用于嵌入式系统的软件开发模式,因此拥有java技术本身的各种特点:平台无关性、网络安全性等等。并且,j2me提供了http高级internet协议, 使手机等移动信息设备能以客户端/服务器的方式直接访问internet的全部信息,不同的客户端访问不同的文件,此外还能访问本地存储区,实现交互式服务。表1 j2ee、j2se和j2me的应用范围j2eej2sej2me用于高性能、大内存服务器设备。适合分布式的、多用户的、企业级应用系统运转的平台,以j2se为基础,增加了处理服务器端计算的功能。用于桌面设备、pc、笔记本。主要运行在unix、linux、microsoft windows等操作系统上。是针对传统桌面应用的api和运行环境。是为了支持像小型嵌入式设备或移动设备而制定的一系列的技术和规范的总称。在提供类似的类库的同时也对j2se中的类库进行了裁剪。32bit处理器,512kb内存cdc设备:机顶盒,智能家电16bit处理器,128kb内存,电池供电cldc设备:智能手机,pdajvmcvmkvm在这里,我们主要介绍j2me的体系结构的系统构成以及相关技术。3.2 j2me体系结构为了满足消费者和嵌入式市场弹性和定制的需求,j2me体系结构采用模块化、可扩展的设计。j2me体系的这种模块化和可伸缩性是通过一个分层软件模型来实现的,这个分层软件模型是构建于设备本地操作系统之上。下图是j2me的软件分层体系结构7。图3 j2me的软件分层体系结构我们可以看出j2me的核心是配置,在它里面定义了java的虚拟机,通过它来和底层的操作系统打交道。简表提供了访问设备的io或者图形界面的能力,配置和简表共同构成了j2me的体系结构,比如cldc/midp可以提供给你开发手机程序的环境。在简表之上针对不同的设备还可以提供不同的可选开发包。3.2.1 配置(configuration)配置是个规范,它定义了基本的j2me运行时环境,包括虚拟机和一组来自j2se的核心类子集。配置是为一组“水平”设备的分类(grouping of devices,设备分组)所定义的最精简的公共平台,这些设备有着相近的处理器能力和内存容量。这里将虚拟机的能力看作是配置的一部分,它运行于本地操作系统之上,而本地操作系统又是目标设备系统软件的一部分。配置的主要目的是针对消费性电子产品的网络连接能力、处理器速度、内存等特性为之分类。每一个配置都对应于一组具有相同或类似计算能力的设备。目前j2me定义了两种配置,它们分别是:cdc(connected devise configuration连接设备配置)和cldc(connected limited device configuration有限连接设备配置)。连接设备配置cdccdc由java社团的jsr36和jsr218定义,分别对应于cdc1.0和cdc1.1两个规范。典型的cdc目标设备运行32位微处理器,总内存容量大约为2-4mb。cdc目标设备具有一个持续的、高带宽的固定网络连接,通常用的是tcp/ip,也可以是间歇性的无线连接,但其带宽有限。此外,这类设备有较强的用户交互能力和稳定而持续的电源供应。cdc支持的设备典型例子有电视机顶盒(set-top box)、web tv、支持internet的可视电话、高端的无线通信设备以及汽车导航与娱乐系统等。运行在cdc上的程序称为j2me application,在cvm上进行解释。 连接受限设备配置cldccldc是j2me的核心构成部分之一。java社团的jsr30和jsr139分别定义了cldc1.0规范和cldc1.1规范。cldc是为具有较小存储容量的设备而设计的。根据规范中所说,运行 cldc的设备应该有 512k或更少的内存空间、一个有限的电源供给 (通常是使用电池)、有限的或断断续续的网络连接性(9600 bps或更少)以及多样化的用户界面甚至没有用户界面。 通常说来,这个配置是为个人化的、移动的、有限连接信息设备而设计,比如手机、呼叫器、pda和pos终端等。运行在cldc上的程序称为midlet。cldc虚拟机的参考实现为kvm,它并不是唯一的,其他公司的虚拟机只要满足相应的cldc里的定义,通过兼容性测试,一样可以作为该配置的虚拟机。由于我们准备研究的对象是手机,它是一种典型的cldc设备,所以有必要对cldc层进行简要介绍。cldc为简表层提供接口服务,同时还可以直接为应用程序层提供服务。cldc通过四个包为简表层和应用程序提供服务,它包括语言服务、输入输出服务、网络通讯服务和实用工具服务等。这些服务分别在以下四个包中实现:(1) java.lang语言包:此包是j2se中的同名包的子集,继承了j2se语言包的大部分功能。但是,由于有限于设备的运行资源,cldc不支持浮点型数据类型,也不提供文件的支持和错误处理的支持。(2) java.io输入输出包:此包是j2se中的同名包的子集,向上层提供基本的io服务。(3) java.util实用工具包:此包是j2se中的同名包的子集,它提供定时器、日期等常用的实用工具类,但是它没有提供java集合工具类。(4) java.microedition网络通讯包:此包是cldc中唯一不是j2se子集的包。它是专门为小型有限资源设备设计的,为其提供类似j2se的网络输入输出功能。从上面对cldc提供的四个包的说明可以看出,其实cldc是j2se的一个子集,其大部分功能都是从j2se中减化来的,同时,它还根据运行设备的特性提供了附加的功能。3.2.2 简表(profile)简表是建立在配置上的特定的api集合。配置只定义了虚拟机和基本的api集合,不定义建立应用程序的细节,这样虽然保证了相同类别的不同设备间的平台相容性,但是舍弃了设备的特殊性。然而,各种消费类和嵌入式设备的特殊性是不容忽视的。简表正是对配置的扩展和补充,提供了配置所缺少的功能,包括应用程序的生命周期、用户界面、网络连接、本地数据存储、安全等。一个简表既可以建立在配置上也可以直接建立在另外一个简表上。由于各种消费类和嵌入式设备功能的多样性,导致了简表的多样性。目前sun公司已经提出的简表有构建于cdc基础上的foundation profile及建立在foundation之上的rmi profile和personal profile。还有构建于cldc基础上的midp(mobile information device profile 移动信息设备间表)和pda profile。移动信息设备简表midpmidp是位于cldc上层的简表,是目前j2me平台中发展最成熟、最广为人所知的简表,主要针对在硬件特性上有诸多限制的移动信息设备(mobile information device, mid),如手机、双向寻呼机和pda等。现在新的智能手机设备,如果支持j2me都会选择支持midp。目前,java社团(java community process, jcp)为这类移动信息设备所定义的midp有两个规范,即jsr37和jsr118,分别对应于midp1.0规范和midp2.0规范。midp v1.0规范中包括:(1) 应用的下载(2) 应用的生命周期(3) 端到端的传输协议,例如http(4) 网络连接(5) 持续性存储(6) 定时器(7) 用户界面现在midp最新的规范为 v2.0,midp v2.0新增加了以下内容:(1) 应用程序的下载和计费(2) 在http的基础上提供了端到端的shttp安全传输(3) 应用程序的数字签名和域的安全模式(4) midlet的push注册midp2.0中要求目标设备必须满足以下最小特征:内存:128kb非易失性内存(掉电后不会失去内容的内存)用于midp组件;8k非易失性内存用于持久存储数据;32kb非易失性内存用于运行虚拟机。(注意:这里的内存需求不包括cldc的存储需求)显示:最小屏幕分辨率为96*54像素;1位色彩深度;屏幕宽高比约1:1输入:单手、双手、触摸屏或任意二者并存。3.2.3 j2me中的虚拟机在j2me中有两类虚拟机cvm(c virtual machine,c虚拟机)与kvm 8。kvm和cvm都可被看作是一种java虚拟机,是jvm的子集,在功能上都是jvm的缩减版。这两类虚拟机的适用范围并不相同,简单地说,cvm比kvm包含更多的功能和支持更多的特性。cvm虚拟机用来执行较高端(硬件功能相对较强)的cdc设备上的java程序;而kvm虚拟机用来执行下载至低端(硬件功能不强)的cldc设备上的midlet。应用程序永远不会直接调用虚拟机服务的,所以对于一般的应用程序开发者可以不用对虚拟机有更深入的了解。3.2.4 j2me的环境通过上面对j2me体系结构中配置、简表以及虚拟机的简单介绍,我们总结出j2me的整体环境9如下图所示:图4 j2me的环境在一个设备上只有一个符合其配置规范的java虚拟机和核心类库,但一个配置上可以有多个简表。3.3 j2me的前景现在绝大多数的手机已经能够支持java技术,并且广泛地采用了j2me平台。那么j2me现在能够做什么呢?现在的手机已不仅仅是用来通话的工具,人们希望手机也能够成为一款娱乐的工具,甚至是商务办公的工具,在提供各种功能的同时也能够访问internet上的各种资源,这都给j2me在智能手机方面的应用留下了广阔的空间。随着硬件的发展和标准的完善,j2me必将能够提供更强大的功能。3.4 j2me 无线应用开发工具目前主流的用于开发j2me应用程序的开发工具,包括sun wireless toolkit 、netbeans ide 4.1、eclipse和jbuilder。wtk是一系列工具的集合,包括ktoolbar、模拟器和辅助工具,使用它们可以为移动电话或者其他嵌入式设备开发midp应用程序7。从2.3 beta版本之后,sun将wtk的名称修改为sun java wireless toolkit,本文使用wtk 2.2正式版。wtk 2.2还提供了很多有用的辅助工具用于开发j2me应用程序,例如网络监视器可以方便的监视客户端与服务器端的通信;内存监视器可以监视程序运行过程中内存的消耗情况,可以以此为根据对程序进行适当的优化;短消息控制台和蓝牙控制中心可以在开发基于wma和蓝牙的应用程序时协助调试。尽管wtk2.2已经提供了如此多的功能,还是很难掩饰其不能编辑代码,对项目管理不够强大的不足。netbeans是一个开源项目,致力于为开发者提供稳定、出色的开发工具。netbeans ide和netbeans平台是的两个著名产品。mobility pack用于开发、测试和调试midp应用程序。mobility pack 4.1可以和netbeans ide 4.1无缝集成,支持cldc 1.1和midp 2.0开发环境。mobility pack还可以很容易地与第三方模拟器集成为开发者提供所需的运行环境。eclipse是ibm开发的开源工具,恐怕已经成为了java开发者最为欣赏的开发工具。围绕eclipse的插件更是层出不穷。eclipseme就是一个非常出色的用于开发midp应用程序的第三方插件。jbuilder是开发midp应用程序的另一选择,与前面介绍的工具不同的是,jbuilder并非免费软件,开发者需要购买才可以使用正式版本。其实,各种开发工具只是以自己的方式对midp应用程序的开发进行了封装,原理还是midp应用程序的开发流程。4 midp程序设计midp就是上面介绍的移动信息设备简表,它是最常用的一种简表。midp适用范围主要集中在智能手机的程序开发上,因为要开发的200人的手机通信簿管理系统,需要了解midp程序设计,下面我们对它做一个简单介绍。4.1 midp编程基础4.1.1 midp的应用程序-midletmidlet是midp中的基本执行单元,这是sun公司对midp上的应用程序的一个独特叫法,意思是“midp小应用程序”。他是用来满足小型资源受限设备的特殊需求,由midp规范所定义的一个全新的应用程序模型。它们不能单独运行,而必须运行在特定的运行环境(容器)之中。这个容器可看作是一个大的应用程序,运行在java虚拟机之上,但不能完成特定的任务,因此需要程序人员编写小的应用程序来完成具体工作。任何一个midlet都是javax.microedition.midlet.midlet的子类,必须继承自javax.microedition.midlet.midlet。 4.1.2 midlet套件一个或多个midlet及其相关资源的集合被称为midlet套件(midlet suite),它是在目标设备上安装、更新和删除midp应用程序的基本单位。midlet套件通常被封装到一个java档案文件(java archive file, 即jar文件)中,这在midp规范中被称为midlet套件打包。一个封装midlet套件的jar文件包含以下元素:实现midlet的类文件;midlet中用到的所有资源文件;描述jar内容的清单文件(manifest file)。此外,每个jar文件还可以配上一个用来描述midlet套件信息的应用程序描述文件(java application descriptor, jad)。midp规范定义了midlet套件中midlet的执行环境。这个执行环境被同一个midlet套件中所有的midlet所共享,并且任何midlet都可以与该套件中的其他midlet交互。4.1.3 midlet常用的几种类介绍(1) midp程序类midlet:midlet是一个虚类,在创建midlet程序时必须有一个是从midlet派生的类。midlet的状态的改变见图5。图5 midlet程序的状态转换(2) display类:在midp中管理用户界面的类只有一个display类,它负责对系统显示和输入设备的管理,最主要的作用是切换在屏幕上显示的窗口。display类是直接从所有类的祖先类object继承而来。当midlet程序运行时系统会为其创建一个对应的display对象,一个midlet程序只能拥有一个display对象。它常用的方法有得到midlet程序当前对应的display对象的getdisplay、设置当前显示的窗口对象的setcurrent等。(3) command类:菜单命令类command是最常用的接受用户输入的方式,用于定义一个单独的命令,设计好的用户界面必须用到它。一般来说,当按下手机的功能键时,界面上都应该有命令菜单弹出来,由用户选择需要执行的命令。command类也是直接从object类派生下来的。一个command对象包含三部分信息:标签(label)、类型(commandtype)和优先权(priority)。一般来说,需要按照如下要求利用command类实现高级事件处理:1. 创建一个包含事件信息的command对象。2. 将command对象添加到textfield、list、form和alert中。3. 在textfield、list、form和alert对象中建立监听器。(4) commandlistener接口:如果要创建command对象,就必须创建并实现commandlistener接口。在midlet中主类一般都有一个监听器,利用它来监听和接受屏幕上的高级事件。利用command类和commandlistener接口实现高级事物处理需要注意几点:1. 至少要创建一个displayable对象、一个或多个command对象;2. 必须将command对象添加到displayable对象上,实现它们之间的关联;3. 为displayable对象添加事件监听器,同时还必须实现commandlistener接口的commandaction方法,当一个实现了commandlistener接口的对象被添加到窗口对象的命令监听列表后,当菜单被选择时,此方法将会被调用。4.2 midp 用户界面设计midp用户界面api有高级和低级之分。高级用户接口类是一般ui的高级抽象,在外观和感觉上提供很少的控制,如字体大小、颜色、类型等都由系统控制实现。通过这种控制机制,开发人员开发的应用程序不用修改就可以移植到不同的移动计算设备上,避免因各个设备支持的颜色、字体不同而需要修改程序。利用高级用户接口类进行编程,程序员控制能力很弱。要对设备进行精确控制,就不能利用高级用户接口类进行编程,而必须利用低级用户界面api。低级用户界面api赋予程序员更多的控制能力,比如在屏幕上画直线(line)、文本(text)和各种图形(shape)。低级用户界面api主要用于游戏程序开发。displayalbe类在显示设备上显示的用户界面对象为displayable对象,在同一时刻应用程序只能有一个displayable对象,通过displayable对象具体完成与用户之间的交互。可以为displayable对象添加command对象和相对应的监听器,而用户进行交互式通过displayable的子类来完成的。displayable类有两个直接子类:screen类和canvas类。前者为高级用户界面api类,后者为低级用户界面api类。4.2.1 利用canvas进行界面设计由于我们所要做的手机通信簿管理系统用到这里的内容较少,因此之简单介绍一下常用的几个类。(1) canvas类:是一个通过displaybale类派生的虚类。除了能够完成作图功能,还允许程序通过重载其他canvas类中的事件处理方法来处理键盘设备和指针设备的输入。(2) graphics类:提供简单的2d作图功能。如在屏幕上画直线(line)、文本(text)和各种图形(shape)。4.2.2 利用screen进行界面设计常用的类介绍:(1) screen类:被定义为一个虚类,并没有提供实际的功能而只是单纯地作为一个父类。下面将介绍的alert、list、textbox、form都是screen类的派生类。(2) alert类:alert(警告窗口)对象类似于一个消息框,主要是用来提醒用户上一个操作的情况或者用来提醒用户对某些操作进行确认。有alarm、confirm、error、warning、info几种警告类型可供选择。(3) list类:list(列表框)对象能够提供列表框的功能。列表框提供单选和复选功能,能够让用户从列表中选取自己需要的选项。有exclusive、multiple、implicit三种模式。(4) textbox类:textbox(文字输入框)对象能够让用户输入文字。(5) textfield类:功能和textbox相似,不同的是textbox可以直接显示在显示屏幕上,而textfield则必须被添加到form中才能够进行显示。(6) form类与item类:form就如同一个容器,在form对象上可以放置多个item对象。form对象类似一个对话框,在它的上面放置多个item派生对象来实现输入和输出功能。(7) ticker类:,它并不是screen的派生类,也不是一个可以显示的窗口。是用来实现一条文本连续不断地在屏幕上水平滚动穿过,滚动的速度和方向由具体设备来决定。4.3 持续数据存储在j2me中,由于设备的资源非常有限,使用传统的方法去实现数据的持久存储是不太现实的。在midp中,提供了一种面向记录的简单数据管理系统- rms(record management system, 记录管理系统)来实现持久存储。4.3.1 记录管理系统rms概述在j2me中与数据存储有关的包时:javax.microedition.rms。包里只定义了一个提供持续数据存储的相关功能的类recordstore。此外包里还定义了4个接口,分别是:(1) recordenumeration:提供记录文件中记录的遍历功能。(2) recordcomparator:在进行记录遍历时,自定义记录之间的比较功能。(3) recordfilter:在进行记录遍历时,自定义记录的筛选功能,能够按照条件选择适当的记录。(4) recordlistener:自定义监听记录更改功能。在使用recordstore类时,几乎每一个成员方法都可能抛出异常,所以在调用时需要做好异常的处理并通过异常类型判断错误原因。与rms相关的异常类型有下面这些:(1) recordstorenotopenexception:表明记录文件并没有被打开。(2) recordstorefullexception:表明记录文件空间满(3) invalidrecordidexception:表明读取记录时提供的记录号不正确。(4) recordstorenotfoundexception:表明记录文件不存在。(5) recordstoreexception:表明使用记录文件时出错,但是异常原因不是前面提到的原因。记录管理系统是通过记录存储(record store)来保存和管理数据的。记录存储由midlet建立,隶属于该midlet所在的midlet套件,当midlet套件被删除时,该套件中的记录存储也会被随之删除。在一个midlet套件中,可以有多个记录存储,每个记录存储的名称必须不同,但在不同套件中的记录存储则可以同名。一个midlet套件中的记录存储可以被该套件中的所有midlet直接访问,因此可以通过记录存储在多个midlet之间共享数据。 记录存储是使用记录来管理数据的,每个记录存储中都可以包含多条记录,每条记录是一个字节数组,它的长度可变,通过一个唯一的记录号recordid来标识。记录号是一个整数,从1开始标记,需要注意的是:如果记录存储中的某条记录被删除,它对应的记录号并不会重新利用,这样会导致两条相邻的记录的记录号不一定连续。4.3.2 记录文件存储的基本操作(创建、删除、修改)要使用持续存储,首先要做的就是通过记录类创建记录文件。每个记录文件都有一个名称,在midp中规定一个记录文件的名称最大为32个字符。在同一个midlet suite内,记录文件名称必须唯一。在rms中没有单独地创建记录文件的方法,而是通过打开记录文件来完成记录文件的创建。在打开现存记录文件或创建新的记录文件时,会创建一个用来执行记录文件操作的对象recodstore,当记录文件被打开后,可以执行对记录的读取、更新和删除工作;当使用完记录文件之后,需要调用closerecordstore进行关闭。如果要删除某记录文件,调用deleterecordstore即可。 4.3.3 记录的基本操作(1) 添加:记录的添加通过addrecord方法实现,添加成功后此方法返回被增加的记录号。(2) 删除:记录的删除通过deleterecord方法实现,通过记录号删除指定记录。(3) 修改:记录的修改通过setrecord方法实现。通过记录号修改指定记录。(4) 读取:记录的读取通过getrecord方法实现。通过记录号读取指定记录,返回记录的字节内容。由于程序没有办法把记录号长期地保留下来,因此当需要查询记录是需要遍历当前记录文件中所有的记录来查找所需要的记录,这时候需要创建recordenumeration接口,然后通过recordenumeration接口遍历所有记录,也可以对记录按照条件进行筛选,然后创建满足条件的记录集合。常用的recordenumeration接口包含的方法:(1) destroy:清除记录集,此时记录所分配的所有内部资源会被删除,所以在使用记录集时一定要在使用完后对记录集调用destroy进行释放。(2) numrecords:得到当前列举的记录集中记录数量(3) haspreviouselement:是否存在上一条记录(4) hasnextelement:是否存在下一条记录(5) previousrecord:得到上一条记录的字节内容,如果存在上一条记录,则同时把当前指向的记录,改为上一条记录(6) previousrecordid:得到上一条记录的记录号,如果存在上一条记录,则同时把当前指向的记录,改为上一条记录(7) nextrecord:得到下一条记录的字节内容,如果存在下一条记录,则同时把当前指向的记录,改为下一条记录(8) nextrecorid:得到下一条记录的记录号,如果存在下一条记录,则同时把当前指向的记录,改为下一条记录(9) 利用recordstore创建recordenumeration接口的方法:enumeraterecords通过打开的记录文件创建用于遍历的记录集。5 手机通信簿管理系统的开发5.1 手机操作系统简介随着智能手机的升温,移动终端操作系统之间的竞争也越来越白热化,目前市场上的移动终端操作系统主要有symbian阵营的symbian os、微软的windows mobile for smartphone、palmsource

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论