J2ME程序设计实例教程(第01章)

合集下载

《J2ME程序设计》课程教学大纲

《J2ME程序设计》课程教学大纲

《J2ME程序设计》课程教学大纲一、课程基本情况开课单位:计算机与信息工程系课程编码:适用专业:软件修课方式:必须总学时:68学时考核方式:考试教材:《J2ME移动应用开发》郝玉龙北方交通大学出版社 2006.9教学参考书:《精通J2ME无线编程》,林胜利,中国铁道出版社,2004年二、课程的性质、任务和目的本课程是计算机软件专业的一门专业基础课程,重在培养学生的移动设备实践开发能力,适应软件企业的工作环境和业界标准,并和国际先进的软件开发理念保持同步。

通过本课程学习,学生应该了解并掌握J2ME技术基础,CLDC与MIDP基本概念,熟练应用J2ME技术开发基于移动设备的应用系统或游戏系统,并了解移动增值业务系统的开发基础。

学习本课程学生应达到如下要求或能力:1、掌握J2ME技术基础以及CLDC与MIDP的基本概念2、熟练应用J2ME技术编写简单应用软件系统3、熟练应用J2ME技术编写简单游戏4、了解无线增值业务(如SMS)应用系统的开发三、课程的主要内容和学时分配(一) 主要内容第1章 J2ME概述 2学时1.1 J2ME简介1.2 J2ME架构1.3 技术规范第2章 Hello World 2+2学时2.1 第一个实例2.2 J2ME程序开发流程2.3 代码解释2.4 JBuilder 9的配置2.5 使用JBuilder 9开发Hello World第3章 MIDlet和MIDlet Suite 4+2学时3.1 MIDlet概述3.2 MIDlet的打包3.3 MIDlet的生命周期3.4 MIDlet的安全管理第4章 MIDP用户界面——高级API 6+2学时4.1 MIDP用户界面概述4.2 高级API详述4.3 开发实用程序第5章 MIDP用户界面库——底层API 8+4学时5.1 Canvas类概述5.2 设备及屏幕属性5.3 基本作图属性设置5.4 基本图形操作5.5 剪切区操作5.6 输入处理5.7 多线程5.8 定制Item5.9 开发实用程序第6章 MIDP游戏编程 6+4学时 6.1 游戏API概述6.2 GameCanvas类6.3 LayerManager和Layer6.4 Sprite6.5 TiledLayer6.6 游戏设计第7章 MIDP网络编程 8+4学时 7.1 通用连接框架7.2 输入输出流7.3 HTTP协议7.4 使用HttpConnection编程7.5 Socket编程7.6 无线消息传递7.7 PushRegistry7.8 网络安全和MIDlet的签名认证第8章永久存储 4+2学时 8.1 永久存储概述8.2 RMS基础8.3 账务管理程序附录A J2ME开发基本环境设置 2+2学时 A.1 获取软件包A.2 软件包安装与配置A.3 J2ME网络资源附录B CLDC概述 2+2学时 B.1 CLDC的目标和功能B.2 CLDC 1.1与CLDC 1.0的区别B.3 CLDC的安全要求B.4 CLDC中虚拟机的变化B.5 CLDC中的类库附录C MIDP概述 2+2学时 C.1 MIDP的范围和软硬件要求C.2 MIDP的包概述C.3 MIDP的部署-Over-The-Air (OTA)C.4 MIDP程序的效率Borland认证课程介绍(二) 学时分配四、课程教学基本要求及重点1.J2ME概述了解J2ME的基本概念,开发架构以及采用的规范,掌握J2ME开发所需基本条件以及开发环境所需软件基础。

J2ME程序设计实例教程(第02章)

J2ME程序设计实例教程(第02章)

2.1 知识点——RecordEnumeration接口
RecordEnumeration接口定义了遍历记录枚举集 合中记录的方法。 常用方法:



public public public public public public public public public public
Form常用方法:



public public public public public public public
Form(String title) Form(String title, Item[] items) int append(Item item) void delete(int itemNum) void deleteAll) Item get(int itemNum) int size()
2.1 知识点——RecordStore类
打开、关闭、删除记录存储区的方法:

public static RecordStore openRecordStore(String name, boolean creat) public void closeRecordStore() public static void deleteRecordStore(String name)
1.
2.4代码实现 ——运行效果
各个功能的运行效果参见教材P43,图2-5
2.4代码实现 ——代码分析
教材P46~74
2.5 实践
动手实践是最好的老师。本章设计的课程表软件并 不完美,还有很多可以改进的地方。下面给出几点改进 意见,仅供参考。

添加图标 作息时间表 更改课程表浏览界面

J2ME程序设计实例教程(第02章)

J2ME程序设计实例教程(第02章)

2.1 知识点——记录管理系统
2.1 知识点——记录管理系统
RecordStore类创建的对象表示一个记录存储区, 一个记录存储区总是与一个MIDlet套件相关联。 在一个MIDlet套件中可以有多个记录存储区,每 个记录存储区都有一个唯一的名字,记录存储区被 MIDlet套件中的所有MIDlet共享。 RecordStore类提供了管理、操作记录存储区的 各种方法。
教材P28,例2-2演示了List组件的使用
2.1 知识点——高级组件(Alert )
Alert对象表示一个消息对话框,用于显示错误或者 其他状态信息。 常用方法:
public
Alert(String title) public Alert(String title, String alertText, Image img, AlertType type) public void setTimeout(int timeout) public void setString(String text) public void setType(AlertType alertType)
参考教材P38~39代码
2.1 知识点——遍历记录存储器
记录存储区对象(RecordStore)调用 RecordEnumeration()方法,将返回一个实现了 RecordEnumeration接口的记录枚举集合。 RecordEnumeration接口定义了遍历记录枚举集合中 记录的方法。
2.1 知识点——遍历记录存储器
J2ME程序设计实例教程
第02章 电子课程表
第2章 电子课程表
本章将设计一个电子课程表软件,该软件能够运行 在支持MIDP2.0的移动信息设备上。通过设计该软件, 学习MIDP图形用户界面编程和RMS的使用。 2.1 知识点 2.2 设计要求 2.3 类设计 2.4 代码实现 2.5 实践

第一个简单的J2ME程序

第一个简单的J2ME程序

上机实验二 简单MIDP程序的创建与调试 3.18[实验目的]完成简单MIDP程序的创建与调试过程,熟悉在Netbeans环境下进行JavaMEMIDP程序开发的基本方法与步骤。

[实验内容]1、创建一个名为Hello的MIDP项目,设备配置使用CLDC1.1,设备配置文件使用MIDP 2.0,设备模拟器直接使用默认的彩屏手机模拟器。

2、在Hello项目中创建一个名为HelloMidlet的MIDlet程序 (源程序见附录部分)。

3、生成该程序,在电脑中对其进行测试运行。

4、通过数据线或其它方法将该程序拷贝到自己的手机中,在手机中试运行该程序。

[实验步骤]1、创建程序2、测试运行程序3、将程序发布到手机中运行/** To change this template, choose Tools | Templates* and open the template in the editor.*/package hello;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;/*** @author yangyan*/public class HelloMIDlet extends MIDlet implements CommandListener {private boolean midletPaused = false;private TextBox text;//<editor-fold defaultstate="collapsed" desc=" Generated Fields ">private Command exitCommand;private Form form;private StringItem stringItem;//</editor-fold>/*** The HelloMIDlet constructor.*/public HelloMIDlet() {text=new TextBox("Hello", "Hello World", 30, TextField.ANY);exitCommand = new Command("Exit", Command.EXIT, 1);text.addCommand(exitCommand);text.setCommandListener(new CommandListener() {public void commandAction(Command cmd, Displayable disp) {destroyApp(true);notifyDestroyed();}});}//<editor-fold defaultstate="collapsed" desc=" Generated Methods ">//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Method: initialize ">/*** Initilizes the application.* It is called only once when the MIDlet is started. The method is called before the <code>startMIDlet</code> method.*/private void initialize() {// write pre-initialize user code here// write post-initialize user code here}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Method: startMIDlet ">/*** Performs an action assigned to the Mobile Device - MIDlet Started point.*/public void startMIDlet() {// write pre-action user code hereswitchDisplayable(null, getForm());// write post-action user code here}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Method: resumeMIDlet ">/*** Performs an action assigned to the Mobile Device - MIDlet Resumed point.*/public void resumeMIDlet() {// write pre-action user code here// write post-action user code here}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Method: switchDisplayable ">/*** Switches a current displayable in a display. The <code>display</code> instance is taken from <code>getDisplay</code> method. This method is used by all actions in the design for switching displayable.* @param alert the Alert which is temporarily set to the display; if <code>null</code>, then <code>nextDisplayable</code> is set immediately* @param nextDisplayable the Displayable to be set*/public void switchDisplayable(Alert alert, Displayable nextDisplayable) {// write pre-switch user code hereDisplay display = getDisplay();if (alert == null) {display.setCurrent(nextDisplayable);} else {display.setCurrent(alert, nextDisplayable);}// write post-switch user code here}//</editor-fold>//<editor-fold defaultstate="collapsed"desc="Generated Method:commandAction for Displayables ">/*** Called by a system to indicated that a command has been invoked on a particular displayable.* @param command the Command that was invoked* @param displayable the Displayable where the command was invoked*/public void commandAction(Command command, Displayable displayable) { // write pre-action user code hereif (displayable == form) {if (command == exitCommand) {// write pre-action user code hereexitMIDlet();// write post-action user code here}}// write post-action user code here}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand "> /*** Returns an initiliazed instance of exitCommand component.* @return the initialized component instance*/public Command getExitCommand() {if (exitCommand == null) {// write pre-init user code hereexitCommand = new Command("Exit", Command.EXIT, 0);// write post-init user code here}return exitCommand;}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Getter: form ">/*** Returns an initiliazed instance of form component.* @return the initialized component instance*/public Form getForm() {if (form == null) {// write pre-init user code hereform = new Form("Welcome", new Item[] { getStringItem() });form.addCommand(getExitCommand());form.setCommandListener(this);// write post-init user code here}return form;}//</editor-fold>//<editor-fold defaultstate="collapsed" desc=" Generated Getter: stringItem ">/*** Returns an initiliazed instance of stringItem component.* @return the initialized component instance*/public StringItem getStringItem() {if (stringItem == null) {// write pre-init user code herestringItem = new StringItem("Hello", "Hello, World!");// write post-init user code here}return stringItem;}//</editor-fold>/*** Returns a display instance.* @return the display instance.*/public Display getDisplay () {return Display.getDisplay(this);}/*** Exits MIDlet.*/public void exitMIDlet() {switchDisplayable (null, null);destroyApp(true);notifyDestroyed();}/*** Called when MIDlet is started.* Checks whether the MIDlet have been already started and initialize/starts or resumes the MIDlet.*/public void startApp() {if (midletPaused) {resumeMIDlet ();} else {initialize ();startMIDlet ();}midletPaused = false;}/*** Called when MIDlet is paused.*/public void pauseApp() {midletPaused = true;}/*** Called to signal the MIDlet to terminate.* @param unconditional if true, then the MIDlet has to be unconditionally terminated and all resources has to be released.*/public void destroyApp(boolean unconditional) {}}。

j2zee课程设计

j2zee课程设计

j2zee课程设计一、课程目标知识目标:1. 理解Java 2 Platform Enterprise Edition(J2EE)的基本概念和体系结构。

2. 掌握J2EE的核心技术,如Servlet、JavaServer Pages(JSP)和Enterprise JavaBeans(EJB)。

3. 学会使用J2EE设计模式,提高分布式应用程序的开发效率。

技能目标:1. 能够运用J2EE技术构建基本的Web应用程序。

2. 独立完成Servlet和JSP的编程任务,实现客户端与服务器的交互。

3. 掌握EJB的开发和使用,实现业务逻辑的封装和远程调用。

情感态度价值观目标:1. 培养学生对J2EE技术及其在电子商务、企业级应用中的兴趣和热情。

2. 培养学生的团队协作意识,提高在项目开发过程中的沟通与协作能力。

3. 强化学生的版权意识,遵守国家相关法律法规,养成良好的编程习惯。

本课程针对高年级计算机专业的学生,结合学科特点和教学要求,旨在使学生掌握J2EE技术的基本知识和实际应用能力。

课程目标具体、可衡量,能够帮助学生和教师在教学过程中明确预期成果,为后续的教学设计和评估提供依据。

通过本课程的学习,学生将能够独立开发具有一定规模的分布式应用程序,为未来的职业生涯奠定坚实基础。

二、教学内容1. J2EE概述- J2EE体系结构和组件技术- J2EE设计模式及其应用场景2. Servlet技术- Servlet生命周期和运行机制- Servlet的请求与响应处理- 会话管理及Cookie、Session的使用3. JavaServer Pages(JSP)- JSP页面结构和执行过程- JSP内置对象及其作用域- JSP标签库和EL表达式4. Enterprise JavaBeans(EJB)- EJB的分类和作用- EJB的生命周期和远程调用- EJB的事务管理和安全性5. J2EE应用案例分析与实战- 结合实际项目案例,分析J2EE技术的应用- 指导学生进行项目实战,巩固所学知识教学内容按照课程目标进行选择和组织,确保科学性和系统性。

J2ME手机游戏程序教程

J2ME手机游戏程序教程

第1章J2ME 技术概述1.1 什么是J2ME1.2 J2ME平台体系结构1.3 MIDlet应用程序的生命周期第1 章J2ME 技术概述随着移动通信的突飞猛进,移动开发这个新鲜的字眼慢慢成为开发者关注的热点。

在CSDN的最近一份调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。

J2ME(Java 2Micro Edition)是嵌入式/移动应用平台的王者,Linux 和WinCE 分列二、三位。

Nokia 等厂商力推的Symbian 平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE 系列在移动平台上会是竞争的主要两方。

如果厂商能在标准实现上做得更加规范,则J2ME 的跨平台特性会发挥得更加淋漓尽致,继续保有王者地位。

本章将从J2ME 的体系结构和MIDlet 应用程序模型。

1.1 什么是J2ME学习J2ME 以前知道什么是J2ME 是非常重要的。

J2ME 是SUN 公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE 和J2EE 共同组成Java 技术的三个重要的分支。

J2ME 实际上是一系列规范的集合,由JCP 组织制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK 测试,这样确保兼容性。

比如MIDP2.0 规范就是在JSR118 中制定的。

可能接触过J2ME 的开发者会觉得说J2ME 是一系列的规范不准确吧。

因为我们在开发中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等内容。

j2me教程graphics简易绘图教程·1

j2me教程graphics简易绘图教程·1

[本期目标]学会简单绘图,并学会简单调试。

先看看上一课的代码,我加上了注释#include <graphics.h> // 绘图库头文件,绘图语句需要#include <conio.h> // 控制台输入输出头文件,getch()语句需要void main(){initgraph(640, 480); // 初始化640x480的绘图屏幕line(200, 240, 440, 240); // 画线(200,240) - (440,240)line(320, 120, 320, 360); // 画线(320,120) - (320,360)getch(); // 按任意键closegraph(); // 关闭绘图屏幕}解释一下:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。

注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。

2. getch实现按任意键功能,按任意键后,程序继续执行。

否则,程序会立刻执行closegraph 以至于看不到绘制的内容。

[作业]用线条画出更多的图形,要求不少于10条直线。

[学习单步执行]完成作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。

2. 按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。

3. 当箭头指向initgraph语句时,按F10,能看到窗口发生了变化。

4. 将新的绘图窗口和VC并排放,相互不要有覆盖。

这步很重要,否则绘图内容将会被VC 窗口覆盖。

5. F10执行getch后,记得激活绘图窗口,并按任意键,否则程序不会继续执行。

6. closegraph后,直接按F5执行全部剩余程序,结束。

单步执行很重要,可以让你知道程序执行到哪里是什么效果,哪条语句执行出了问题等等。

第一章、J2ME概述

第一章、J2ME概述

Configuration-CLDC

CLDC主要针对的是大量的小型设备,通 常具有间歇的网络连接,速度较慢的处 理器,有限内存,
如手机,呼机,PDA等。 这些设备通常具有16位或32位的处理器, Java平台和应用程序可用内存最低128K到 521K。
Configuration-CDC

CDC针对那些具有更多内存、更快速的 处理器和更大的网络带宽的设备,
Configuration规范要求
由于Configuration的目标是保证各种有限 资源设备的应用的可移植性和可协同性 Configuration不能定义任何可选特性。因 为可选特性对Configuration的内容具有重 要的影响, 领域相关的功能必须在J2ME的Profile和 可选包中定义。

每种Configuration、Profile和可选包的组 合都针对了一类设备,
这样就可以在内存、处理器能力、以及I/O 能力方面对Java平台的性能进行优化。

商业软件开发商对程序的可移植性的要 求通常不会是要求在所有设备上程序都 可运行,通常只是在某一类设备上存在 这种要求。
J2ME的体系架构

结果:因缺乏相应的硬件导致失败。
J2ME的发展历史

迅猛发展-Java语言
借Internet的东风,出现了Java Applet。 其跨平台特性极具吸引力,因此在PC桌面及 Server端(JSP、servlets、EJB等)迅速扩展。
J2ME的发展历史

再次应用到消费及嵌入式设备
手机 Palm PDA 其他消费及嵌入式设备等
CLDC中虚拟机的变化

相对于J2SE,在CLDC中,许多Java语言 特性都由于要求的资源太多或者其它安 全原因被删除,删除的属性包括:

第1章-J2ME简介

第1章-J2ME简介

(1)MIDP API ) (2)OEM Specific API 2)
用Java编写程序的最大优点是可以一 编写程序的最大优点是可以一 次编写,随处运行。 次编写,随处运行。
1.2 J2ME应用介绍 J2ME应用介绍 1.2.1 J2ME手机游戏 J2ME手机游戏
如同Internet的普及导致网络游戏的高 的普及导致网络游戏的高 如同 速发展一样, 速发展一样,手机的普及导致手机游戏市 场呈现爆炸式的发展, 场呈现爆炸式的发展,随着手机性能的增 强,在未来几年里对手机游戏开发的需求 将大幅上涨。 将大幅上涨。
1.1.2
J2ME与Java体系结构 ME与Java体系结构
J2EE、J2SE和 图1-1 J2EE、J2SE和J2ME 的应用领域
1.1.3
JVM、CVM和KVM介绍 JVM、CVM和KVM介绍
Java 程序是以边解释边执行的方式运 行的,所有的Java 程序都会被编译成为二 行的,所有的 进制代码并运行在Java虚拟机上(J2EE、 虚拟机上( 进制代码并运行在 虚拟机上 、 J2SE 中的 中的Java 虚拟机简称为 JVM)。 )。
也就是说, 也就是说,J2ME 先把所有的嵌入式 装置利用Configuration 的概念区隔成两种 装置利用 抽象的型态。 抽象的型态。
1.1.5
MIDP介绍 MIDP介绍
J2ME 使用配置(CDC或CLDC)和 使用配置( 或 ) 简表( 简表(Profile)定制运行时环境(Java )定制运行时环境( Runtime Environment,Java,JRE)。 , , )。
其实这并不矛盾, 其实这并不矛盾,因为这些就是在相 关规范中制定的。 关规范中制定的。
1.1.1

J2ME游戏开发第一章PPT课件

J2ME游戏开发第一章PPT课件

▪ private Command exitCommand; private TextBox tb;
▪ public HelloWorld() { exitCommand = new Command("退出",Command.EXIT,1);

tb = new TextBox("你好!,J2ME","你好!,J2ME",15,0);
▪ // TODO Auto-generated method stub
Display.getDisplay(this).setCurrent(tb); }
▪ protected void pauseApp() { // TODO Auto-generated method stub }
不同点:面向不同设备的具体配置不同
10
CDC CLDC
虚拟机、配置和简表关系图
选择性的类 程序包
J2ME基本类 程序包
Java虚拟机
基本配置 MID配
文件
置文件
CDC CLDC
CVM
KVM
11
KVM & CLDC
▪ CLDC(Connected, Limited Device Configuration面向连接受限的设备配置) , J2ME的基本类程序包,所用的Java虚拟机为 KVM(K虚拟机)。

tb.addCommand(exitCommand);
▪ stub }
tb.setCommandListener(this);// TODO Auto-generated constructor
▪ protected void startApp() throws MIDletStateChangeException {

J2ME嵌入式应用开发 讲义(1)

J2ME嵌入式应用开发 讲义(1)

嵌入式应用开发讲义J2ME开发技术第1章J2ME概述1.1J2ME背景介绍:JA V A和J2ME1.2移动无线网络和连接设备简介1.3J2ME架构简介1.4MIDP和MIDlet 简介1.5本章小结第2章J2ME开发环境设置2.1J2ME开发设计模式2.2J2ME通用开发工具和集成开发工具2.3本章小结第3章J2ME用户界面3.1MIDP 高级用户界面设计概述3.2Display类和DisplayAble类3.3屏幕类3.4表单中的组件3.5事件处理3.6MIDP界面实例3.7Canvas画布屏幕设计3.8图形绘制与Grapics类3.9文字绘制与Font类3.10图像处理与Image类3.11Canvas事件处理3.12绘图实例3.13本章小结第4章数据存储管理系统4.1数据存储系统概述4.2 记录存储器管理4.3数据库系统基本操作4.4 记录存储器进阶操作4.5JDBC 及开发基础4.6通讯录实例4.7本章小结第6章通用连接框架6.1通用连接框架概述6.2通用连接框架的各种连接6.3通用连接框架的七个接口6.4HTTP协议概述部分内容来源于第5章 MIDP持久化解决方案-RMSJ2ME 中文教程by 第8 章存储管理系统2ME开发大全部分内容来源于第4 章MIDP 低级UI 的使用J2ME 中文教程by 6.5建立HTTP连接6.6HTTP连接通信与会话管理6.7本章小结第7章基于红外和蓝牙协议的网络开发7.1无线数据传输概述7.2蓝牙技术通信7.3红外技术通信7.4 蓝牙技术实例7.5本章小结第8章Messaging应用开发8.1无线消息WMA概述8.2WTK提供的模拟工具8.3WMA类库的介绍和使用8.4WMA实例8..5本章小结第9章多媒体开发9.1MM APl概述9.2媒体管理Manager类9.3播放器接口Player类9.4程序实例9.5本章小结第10章MIDP游戏编程10.1MIDP 2.0 Game API概述10.2游戏容器GameCanvas类10.3游戏精灵Sprite类10.4游戏地图TiledLayer类10.5图层管理LayerMaIlager类. 10.63D开发概述10.7游戏实例:蜜蜂射击10.8本章小结第11章综合示例分析11.1 摇摆虫游戏11.1.1 游戏设计第一步:创意11.1.2 游戏设计第二步:需求分析11.1.3 游戏设计第三步:详细设计11.1.4 游戏设计第四步:代码设计11.1.5 游戏设计第五步:游戏测试11.1.6 总结11.2 纸飞机游戏11.2.1 创意11.2.2 需求规格11.2.3 基本流程图和控制转移表11.2.4 程序模块分析11.2.5 总结第一章J2ME简介1.1.概述J2ME就是Java 2 micro Edition的缩写,它是原SUN公司(已被Oracle公司收购)针对嵌入式、消费类电子产品推出的开发平台,专门用于开发消费性电子产品及应用,例如手机,PDA等。

j2me实验三手机游戏程序设计 (1)

j2me实验三手机游戏程序设计 (1)

百度文库- 让每个人平等地提升自我!淮海工学院计算机工程学院实验报告书课程名:《手持设备软件开发》题目:实验3:J2ME手机游戏程序设计班级:软件学号: 1姓名:评语:成绩:指导教师:批阅时间:年月日一、实验目的与要求掌握J2ME手机游戏设计的一般方法,掌握游戏画布,分块图层,精灵和图层管理类的使用方法。

掌握控制游戏画面更新及固定帧率的方法。

二、实验内容对实例MIDP项目Game中的SimpleSprite游戏应用程序做如下的修改:1.使用动态分块修改游戏的背景使得在游戏运行过程中小花与小草连续的变换。

2.增加命令,可以控制sprite0移动的速度,同时保证画面的稳定更新。

3.sprite1在游戏开始时出现的位置随机生成,但要保证不与sprite0发生碰撞。

三、实验步骤SimpleSpriteCanvas.javapackage SimpleSprite;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.util.*;public class SimpleSpriteCanvas extends GameCanvas{private boolean isPlay; // 值为true时游戏线程反复执行private long delay; // 线程执行时的延时,控制游戏每帧的时间private int width, height; // 保存屏幕的宽度和高度private TiledLayer background; // 定义背景为分块图层private Sprite sprite0, sprite1; //sprite0 大的, sprite1 小的private Image backImage, spriteImage; // 生成背景、精灵所用图像private final int toLeft[]={0, 1, 1, 2, 2, 3, 3, 4}; //精灵0向左运动的帧序列private final int toRight[]={5, 6, 6, 7, 7, 8, 8, 9}; //精灵0向右运动的帧序列private int xStep = 0, yStep = 0;private boolean pxCollides = false; //碰撞检测方式,默认矩形检查private boolean rightToLeft = true;private int aniIndex1, aniIndex2;private int state=1;private int moveLength=2; //初始步长private int xPosition=30,yPosition=80;// 构造方法public SimpleSpriteCanvas() {super(true);width = getWidth();height = getHeight();delay = 50;background = createBackground();sprite0 = createSprite("/SimpleSprite/sprite0.png", 56, 29);sprite1 = createSprite("/SimpleSprite/sprite1.png", 34, 27);sprite0.setPosition(180,70);createPosition();//产生随机位置sprite1.setPosition(xPosition,yPosition);collidesFind();sprite0.setFrameSequence(toLeft);sprite1.defineCollisionRectangle(0, 0, 64, 64);}// 启动线程体public void start() {isPlay = true;Thread1 thread1= new Thread1();Thread2 thread2= new Thread2();thread1.start();thread2.start();}// 停止线程执行public void stop() { isPlay = false; }// 线程体,游戏主体class Thread1 extends Thread{public void run(){Graphics g = getGraphics(); // 获取脱机屏幕缓冲区中图形对象long beginTime = 0, endTime = 0;while (isPlay == true) {beginTime = System.currentTimeMillis();queryKey(); // 查询按键状态sprite0Move();drawScreen(g); // 绘制屏幕endTime = System.currentTimeMillis();if (endTime - beginTime < delay) {try {Thread.sleep(delay - (endTime - beginTime));} catch (InterruptedException ie) { }}}}}// 主动查询按键状态,进行处理private void queryKey() {int keyStates = getKeyStates(); // 查询游戏按键状态,游戏按键被按下时if ((keyStates & LEFT_PRESSED) != 0) // 如果未超过左侧范围,向左移动xStep = -1*moveLength;if ((keyStates & RIGHT_PRESSED) !=0) // 如果未超过TiledLayer右侧范围,向右移动xStep = moveLength;if ((keyStates & UP_PRESSED) != 0) // 如果未超过TiledLayer上侧范围,向上移动yStep = -1*moveLength;if ((keyStates & DOWN_PRESSED) !=0) // 如果未超过TiledLayer下侧范围,向下移动yStep = moveLength;}// 在屏幕上显示游戏画面private void drawScreen(Graphics g) {g.setColor(0x99ccff);g.fillRect(0, 0, getWidth(), getHeight());background.paint(g);sprite0.nextFrame();sprite1.nextFrame();sprite0.paint(g);sprite1.paint(g);flushGraphics();}// 小花与小草转换class Thread2 extends Thread{public void run(){while (isPlay == true){if (state==1){background.setAnimatedTile(aniIndex1, 6);background.setAnimatedTile(aniIndex2, 5);state=0;}else{background.setAnimatedTile(aniIndex1, 5);background.setAnimatedTile(aniIndex2, 6);state=1;}try {Thread.sleep(500);} catch (InterruptedException ie) { S ystem.out.println("sleep wrong");} }}}// 建立分块图层private TiledLayer createBackground() {try {backImage = Image.createImage("/SimpleSprite/bgtiles.png");} catch (Exception e) {}TiledLayer tiledLayer = new TiledLayer(8,9,backImage,32,32);aniIndex1 = tiledLayer.createAnimatedTile(5);aniIndex2 = tiledLayer.createAnimatedTile(6);// 数组中存放单元格中需要填充的分块号int[] map = {0, 0, 7, 0, 0, 0, 8, 0,7, 0, 0, 0, 7, 0, 0, 7,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, -2, 0, 0, 0, -1,0, 0, 1, 2, 3, -1, 1, 2,0, -2, 1, 2, 2, 2, 2, 2,1, 2, 2, 4, 4, 4, 4, 4,};// 将分块填充进相应的单元格for (int i=0; i < map.length; i++) {int column = i % 8;int row = (i - column) / 8;tiledLayer.setCell(column,row,map[i]);}return tiledLayer;}// 建立精灵private Sprite createSprite(String picName, int spriteWidth, int spriteHeight) { try {spriteImage = Image.createImage(picName);} catch (Exception e) {}Sprite sprite = new Sprite(spriteImage, spriteWidth, spriteHeight);return sprite;}private void sprite0Move() {sprite0.move(xStep, yStep); //移动// 如果方向改变则改变动画序列if (xStep > 0 && rightToLeft == true) {rightToLeft = false;sprite0.setFrameSequence(toRight);}else if (xStep < 0 && rightToLeft != true) {rightToLeft = true;sprite0.setFrameSequence(toLeft);}//检测碰撞if( sprite0.collidesWith(background,pxCollides) ||sprite0.collidesWith(sprite1,pxCollides) ) {//如果移动后和其他背景或另一个物体发生碰撞则返回到原来位置sprite0.move(-xStep*2, -yStep*2);}// 重新初始化步长xStep = yStep = 0;}public void change() {// 改变碰撞检测方式,true表示采用象素级检查,false表示采用矩形检查if (pxCollides == true)pxCollides = false;elsepxCollides = true;}public void fast(){if(moveLength<10)moveLength++;}public void slow(){if(moveLength>1)moveLength-- ;}public void createPosition(){Random rdm = new Random();xPosition = (rdm.nextInt() >>> 1)%224 ; //取0-224的随机正数yPosition = (rdm.nextInt() >>> 1)%256 ;}public void collidesFind(){while( sprite1.collidesWith(background,pxCollides) ||sprite1.collidesWith(sprite0,pxCollides) ) {createPosition();sprite1.setPosition(xPosition,yPosition);}}public void displayChange(){if (sprite1.isVisible())sprite1.setVisible(false);elsesprite1.setVisible(true);}}SimpleSpriteMidlet.javapackage SimpleSprite;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;// MIDlet主程序public class SimpleSpriteMidlet extends MIDlet implements CommandListener { private Display display;private SimpleSpriteCanvas gameCanvas;private Command exitCommand, actCommand,fastCommand,slowCommand,displayCommand;// 在MIDlet启动时进行初始化工作public void startApp() {display = Display.getDisplay(this); // 获得显示屏幕对象gameCanvas = new SimpleSpriteCanvas(); // 建立GameCanvas对象// 建立Command对象exitCommand = new Command("退出", Command.EXIT, 1);actCommand = new Command("改变", Command.SCREEN, 1);fastCommand = new Command("加速", Command.SCREEN, 1);slowCommand = new Command("减速", Command.SCREEN, 1);displayCommand = new Command("小龙显隐", Command.SCREEN, 1);gameCanvas.addCommand(exitCommand);gameCanvas.addCommand(actCommand);gameCanvas.addCommand(fastCommand);gameCanvas.addCommand(slowCommand);gameCanvas.addCommand(displayCommand);gameCanvas.setCommandListener(this);gameCanvas.start(); // 启动GameCanvas中的线程体display.setCurrent(gameCanvas);}// Command事件处理程序public void commandAction(Command c, Displayable s) {if (c == exitCommand) {exit();}else if (c == actCommand) {gameCanvas.change();}else if (c == fastCommand) {gameCanvas.fast();}else if (c == slowCommand) {gameCanvas.slow();}else if (c == displayCommand) {gameCanvas.displayChange();}}public void pauseApp() { }public void destroyApp(boolean unconditional) { }// 停止线程,结束MIDlet程序public void exit() {gameCanvas.stop();destroyApp(false);notifyDestroyed();}}四、实验结果五、结果分析与实验体会这一次试验实现要求不是很难,但是不管用什么办法实现总是有不足的地方。

3 详解J2ME MIDP程序开发流程

3 详解J2ME MIDP程序开发流程

详解J2ME MIDP程序开发流程MIDlet 手机程序运行的基本架构MIDlet 手机程序开发流程MIDlet 手机程序生命周期MIDP 手机程序发布与安装使用混淆器(Obfuscator)WTK的相关配置仿真器的使用使用仿真器执行已开发MIDlet程序在进入手机程序设计之前,我们需要说明一个新的名词,那就是在手机上的应用程序名称。

我们都知道,在浏览器上执行的Java 程序叫做Applet,在Palm OS上执行的Java程序叫做Spotlet,而在手机上执行的应用程序就称之为“MIDlet”(Mobile Information Derice-let)。

如果有学习过Java程序设计的朋友,那么对MIDlet的开发就可以称的上是一个简单的差使了。

因为同样都是Java的架构,而且MIDlet在类别的使用上却简单了很多。

这也就是说,就算没有学过Java程序设计也不需要惊慌,只要学习少数的几个简单类别就可以写出一个MIDlet应用程序了。

一、MIDlet手机程序运行的基本架构根据上一章所介绍的知识得知,想要开发手机上的应用程序就是需要架构在CLDC (Configuration Layer)与MIDP(Profile Layer)之上,而WTK中就会符合且包含了JSR为CLDC 与MIDP的规范与所需的API函数库。

换句话说,想要学会MIDlet程序设计就必须先要深入了解它的基本架构与相关名称。

1.MIDlet Suit在手机上的应用程序称之为MIDlet,那么何谓MIDlet Suit(套件)呢?就是多个MIDlet 的集合封装,图1即为MIDlet与MIDlet Suit的关系示意图。

图1 MIDlet 与MIDlet Suit的关系示意图既然MIDlet Suit与MIDlet都可以在手机上执行,那么为何需要将MIDlet集合起来成为一个MIDlet Suit呢?这样的想法是基于手机上的资源有限,所以尽可能地将可以共享资源的MIDlet集合起来。

j2me

j2me

__ _学院J2ME移动应用开发课程设计报告《模拟手机写短信程序》姓名:_ __学号:___班级:_ __指导教师:__目录摘要 (3)第1章实验目的 (4)1.2实现的目标 (4)1.1实现的目标 (4)1.2 开发环境 (4)第2章实验设计…………………………………………………………………………52.1界面与功能设计…………………………………………………………………5第3章实验示例....................................................................................73.1实验截图 (7)第4章实验小结 (10)4.1 心得 (10)4.2 实验中遇到的问题 (10)附录(代码) (11)摘要本实验是为了实现模拟手机发短信的功能。

对于用户来说(不光是我们,连一些年纪大的老人)通过按一系列按钮就可以轻松地方便的编辑短信内容,输入号码,发送短信等。

在我们设计的这个程序中,我们可以通过定义一些命令Command及相应命令的处理方法commandAction等,来实现从一个界面到另一个界面转换的功能。

在我设计的这个系统中,主要由解锁界面,欢迎界面,编辑短信界面,警告界面,输入号码界面等界面组成。

各个界面之间通过if 语句来联系。

在该实验中,我们用到了好多对象:Display对象,Displayable 对象,Screen对象,List对象等。

其中Screen又有四个子类,分别为:Textbox ,List ,Alert ,Form。

本实验是基于MIDP高级界面的一个实验。

高级界面具有很高的移植性,对于移动通信设备来说,这是非常重要的。

关键词:模拟手机发送短信,Command,对象,欢迎界面1.1实现的目标在科学技术通讯发展如此迅速的当今社会,作为人与人交流的一种重要方式的移动通信技术,也迎来了空前的发展机遇。

而本实验所需的图形用户界面又是程序和用户之间交互的桥梁。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


打包MIDP应用程序,并发布到Web服务器 打包 应用程序,并发布到 服务器 应用程序 启动模拟器,安装 启动模拟器,安装MIDP应用程序 应用程序
(教材 ,例子 教材P6,例子1-1) )
1.4 MIDP应用程序 应用程序
MIDP应用程序是由若干个类所组成的,其中必须有 应用程序是由若干个类所组成的, 应用程序是由若干个类所组成的 一个类继承来自javax.microedition.midlet包中 一个类继承来自 包中 的抽象类MIDlet,这个类被称为应用程序的主类。运 的抽象类 ,这个类被称为应用程序的主类。 行时,移动信息设备上预置的Java应用管理器(Java 应用管理器( 行时,移动信息设备上预置的 应用管理器 Application Manager, JAM)负责创建主类 ) 的子类) (MIDlet的子类)的实例对象。 的子类 的实例对象。
图1-4 J2ME WTK目录结构
1.3 J2ME无线工具包 无线工具包——开发 开发MIDP程序 无线工具包 开发 程序
MIDP应用程序的开发过程: 应用程序的开发过程: 应用程序的开发过程
1.创建新项目 2.编写 编写MIDP应用程序 应用程序 3.编译、预校验 编译、 4.在模拟器上运行、调试 在模拟器上运行、 5.打包、发布应用程序 打包、
MIDlet套件(MIDlet Suite)是MIDP应用程序的集合,被 套件( 应用程序的集合, 套件 ) 应用程序的集合 封装成一个Jar文件。在这个文件中包含下面三部分内容。 文件。 封装成一个 文件 在这个文件中包含下面三部分内容。 实现MIDP应用程序的类文件,在一个MIDlet套件中可以有 应用程序的类文件,在一个 实现 应用程序的类文件 套件中可以有 多个MIDlet存在。 多个 存在。 存在 MIDlet所需要的资源文件,例如,图标、声音等等。 所需要的资源文件,例如,图标、声音等等。 所需要的资源文件 Jar清单文件 清单文件——MANIFEST.MF,用于描述 文件的内容。 清单文件 ,用于描述Jar文件的内容。 文件的内容 每个MIDlet套件都有一个对应的 套件都有一个对应的JAD(Java Application 每个 套件都有一个对应的 ( Descriptor,Java应用描述器)文件,用来描述 应用描述器) , 应用描述器 文件,用来描述MIDlet套件 套件 的信息。 的信息。
1.4 MIDP应用程序 应用程序——MIDlet套件 应用程序 套件
表1-1 MIDlet属性 属性 属性 MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-n MicroEdition-Profile MicroEdition-Configuration MIDlet-Description MIDlet-Jar-Size MIDlet-Jar-URL MIDlet-Info-URL MIDlet-Data-Size MIDlet-Icon 套件的名字 套件的版本号 套件的开发商 套件包含的MIDlet 套件运行所需的简表版本 套件运行所需的配置版本 套件描述 Jar文件的大小,单位:字节 套件的下载地址 套件信息 套件用于RMS的最小字节 套件的图标 描述 MANIFEST.MF 必需 必需 必需 必需 必需 必需 可选 无 无 可选 可选 可选 JAD文件 文件 必需 必需 必需 必需 必需 必需 可选 必需 必需 可选 可选 可选
1.2 J2ME的体系结构 的体系结构
Java应用程序 其它 的应 用软 件
可选包(Optional Package)
简表(Profile) 配置(Configuration) J2ME的层次 结构,它 们共同构成了Java应用 程序的运行时环境。
操作系统(Operating System) 嵌入式设备
1.3 J2ME无线工具包 无线工具包——安装 无线工具包 安装
1. 2.
安装JDK1.4.2或者更高版本。 或者更高版本。 安装 或者更高版本 运行下载的Java Wireless 运行下载的 Toolkit 2.2安装文件,按照提 安装文件, 安装文件 示完成J2ME无线工具包的安装。 无线工具包的安装。 示完成 无线工具包的安装
1.1 什么是 什么是J2ME
J2ME是Sun公司针对移动电话、PDA和电视机顶盒等 是 公司针对移动电话、 公司针对移动电话 和电视机顶盒等 嵌入设备定义的Java技术平台,其目的是为这些资源 技术平台, 嵌入设备定义的 技术平台 受限的嵌入式设备提供一个公共的、灵活的、 受限的嵌入式设备提供一个公共的、灵活的、开放的 Java程序运行环境,也为软件开发人员开发嵌入式设 程序运行环境, 程序运行环境 备上的Java应用程序提供一个灵活、开放的开发环境。 应用程序提供一个灵活、 备上的 应用程序提供一个灵活 开放的开发环境。 除了J2ME外,Sun公司还发布了 外 公司还发布了J2SE和J2EE。J2SE 除了 公司还发布了 和 。 主要用于桌面应用程序的开发, 主要用于桌面应用程序的开发,J2EE主要用于企业应 主要用于企业应 用程序的开发。 用程序的开发。
Байду номын сангаас
1.4 MIDP应用程序 应用程序——MIDlet套件 应用程序 套件
Chapter01项目打包后生成的清单文件内容。 项目打包后生成的清单文件内容。 项目打包后生成的清单文件内容
MIDlet-1: 第一个应用程序, /App.png, FirstMIDlet MIDlet-2: 浏览图片, /icon.png, ShowPhoto MIDlet-3: MIDlet状态转换, /App.png, NotifyTest MIDlet-Name: Chapter01 MIDlet-Vendor: YangGuang MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0
1.4 MIDP应用程序 应用程序——安装 应用程序 安装
安装、配置 安装、配置OTA下载服务器 下载服务器

解压apache-tomcat-5.5.15.zip文件到 盘根目录下, 文件到D盘根目录下 解压 文件到 盘根目录下, 将生成D:\apache-tomcat-5.5.15目录,该目录为 目录, 将生成 目录 Tomcat的主目录, 的主目录, 的主目录 设置JAVA_HOME环境变量。在MS-DOS窗口中输入命令: 环境变量。 窗口中输入命令: 设置 环境变量 窗口中输入命令 set JAVA_HOME=D:\JDK1.5
暂停状态
JAM调用 调用destroyApp() 调用
JAM调用 调用destroyApp() 调用
销毁状态 图1-10 MIDlet生命周期及状态转换 生命周期及状态转换
教材p11,例1-2;p14,例1-3 , 教材 ; ,
1.4 MIDP应用程序 应用程序——MIDlet套件 应用程序 套件
J2ME程序设计实例教程 程序设计实例教程
第01章J2ME入门 章 入门
作者 :杨光
E-mail:guang760212@ :
第1章 J2ME入门 章 入门
1.1 1.2 1.3 1.4 什么是J2ME 什么是 J2ME体系结构 体系结构 J2ME无线工具包 无线工具包 MIDP应用程序 应用程序
1.4 MIDP应用程序 应用程序——MIDlet套件 应用程序 套件
Chapter01项目生成的 项目生成的JAD文件内容。 文件内容。 项目生成的 文件内容
MIDlet-1: 第一个应用程序, /App.png, FirstMIDlet MIDlet-2: 浏览图片, /icon.png, ShowPhoto MIDlet-3: MIDlet状态转换, /App.png, NotifyTest MIDlet-Jar-Size: 19825 MIDlet-Jar-URL: Chapter01.jar MIDlet-Name: Chapter01 MIDlet-Vendor: YangGuang MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0
1.4 MIDP应用程序 应用程序——生命周期 应用程序 生命周期
一个MIDlet从被 从被Java应用管理器初始化,运行,到 应用管理器初始化, 一个 从被 应用管理器初始化 运行, 被回收,称作一个生命周期。 被回收,称作一个生命周期。
构造方法 JAM调用 调用pauseApp() 调用 JAM调用 调用startApp() 调用 活动状态
图1-1 嵌入式设备上的软件结构
1.2 J2ME的体系结构 的体系结构
RMI简表 简表 MIDP PDA简表 简表 Personal简表 简表
Foundation简表 简表 CDC核心类库 核心类库 CVM 主机操作系统
CLDC核心类库 核心类库 KVM
图1-3 主要的配置和简表及其关系
1.2 J2ME的体系结构 的体系结构
J2ME专家组针对嵌入式设备的特点,对J2SE的核心类进行 专家组针对嵌入式设备的特点, 的核心类进行 专家组针对嵌入式设备的特点 了适当的精简和扩充库,分别为CLDC和CDC配置定义了相应的 了适当的精简和扩充库,分别为 和 配置定义了相应的 核心类库。他们之间的关系如图1-2。 核心类库。他们之间的关系如图 。
相关文档
最新文档