《java 程序设计之网络编程 》

27
Java 程程程程程程程程程程程程程程程程程程 程程程程[email protected] 程程程程

Upload: opal

Post on 16-Mar-2016

137 views

Category:

Documents


4 download

DESCRIPTION

《Java 程序设计之网络编程 》. 教学课件. 重庆大学计算机学院 电子邮件: [email protected]. J2ME 是 JAVA2 的微型版本,只支持 JAVA 标准规范中所定义的核心类函数库的子集。 J2ME 定位于嵌入式系统的应用上. 第 19 章 J2ME 概述. 主要内容. 19.1 J2ME 概述 19.2 J2ME 技术架构 19.3 MIDP 应用程序开发. 19.1 J2ME 概述. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 《Java 程序设计之网络编程 》

《 Java 程序设计之网络编程》

重庆大学计算机学院电子邮件: [email protected]

教学课件

Page 2: 《Java 程序设计之网络编程 》

第 19 章 J2ME 概述 J2ME 是 JAVA2 的微型版本,只支持 JAVA 标准规范中所定义的核心类函数库的子集。 J2ME 定位于嵌入式系统的应用上

Page 3: 《Java 程序设计之网络编程 》

主要内容• 19.1 J2ME 概述 • 19.2 J2ME 技术架构 • 19.3 MIDP 应用程序开发

Page 4: 《Java 程序设计之网络编程 》

19.1 J2ME 概述 • J2ME 是 JAVA2 的微型版本只支持 JAVA标准规范中所定义的核心类函数库的子集。比如, J2ME CLDC 的规范之中,只支持 j

ava.lang.*,java.io.* , 以 及 java.util.* 的 类函数库。并加入了一些支持嵌入式系统的扩展类函数库,如: javax.meicroedition.io.* 类函数库。但是并不支持所有的 JAVA 基本类。

Page 5: 《Java 程序设计之网络编程 》
Page 6: 《Java 程序设计之网络编程 》

19.1.1 J2ME 技术架构 • J2ME 最基本的规范制定在 JSR-68( Java 规范编号第 68 号),在此规范里头定义了 J2ME 的技术架构

Page 7: 《Java 程序设计之网络编程 》

19.1.2 Configuration • 于是 J2ME 先大致将所有的嵌入式设备大体上区分为两种:一种是资源有限 ;另外一种则是资源相对无限的设备 • J2ME 把运算能力有限、电力有限这类的嵌入式设备称做 Connected Liminted Device(可连接外界、资源有限的设备。

Page 8: 《Java 程序设计之网络编程 》

• 规定这类型的设备如果要能执行 Java 程序,则必须满足某些特定条件( CPU 速度、内存、联机速度),这些必须满足的条件就定义在 Connected Limited Device Configuration ( CLDC )规范之中。

• 另外一种设备则称为 Connoced evice (可连接、资源相对无限的设备),这种设备要能够执行 Java 程序的规范则定义在 Connected Device Configuration ( CDC )规范里面。

Page 9: 《Java 程序设计之网络编程 》
Page 10: 《Java 程序设计之网络编程 》

19.1.3 Profile • Profile 是架构在 Configuration 之上的规范。所以每种 Profile 都会声明它是根植于哪种

Configuration 的。之所以有 Profile 的出现,是为了要更明确的区分出各种嵌入式设备之上的 Java 程序该如何开发,以及它们应该具有哪些功能。因此 Profile 中定义了与特定嵌入式设备非常相关的扩充类库。

Page 11: 《Java 程序设计之网络编程 》

• 通常 Java 程序在各种嵌入式设备上的用户界面该如何呈现就是定义在 Profile 上的(例如MIDP 之中的 LCDUI , Liminited Configuration Device User Interface ) .Profile 之中也是定义了程序该如何和用户或设备产生互动(例如程序的生命周期,如何接受来自用户的信息)。 Profile 之中定义的扩充类库是根据底层 Configuration 内所定义的核心类库所建立,为了更符合特殊设备的需求, Profile会在 Configuration 之中的类增加新的方法,或是让方法抛出新的异常。

Page 12: 《Java 程序设计之网络编程 》

19.1.4 Optional Packages

• 除了 Configuration 与 Profile 之外,在 J2ME 规范之中还定义了厂商选择性实现( Optional Packages ,选择性包)。所谓的厂商选择性实现,通常是一些本身具有独立价值的 API ,厂商可以依据自己的需求,选择性实现其中某些 Optional Packages 规范。

Page 13: 《Java 程序设计之网络编程 》

19.1.5 J2ME 工业标准—— JTW1

• JWTI ( Java Technology for Wireless Industry )是一个综合性的规范,其目的是为了确保 J2ME 软件的可移植性。所以 JWTI规范出了规范无线通讯平台(特别是手机)所必须支持的 J2ME 标准之外,也对既有规范中模糊不清的地方予以加强。

Page 14: 《Java 程序设计之网络编程 》

• 为了解决上述问题,进一步提高 J2ME 应用程序的可移植性, Sun Microsystems 以 MIDP2.0 规范为核心,设计了 JTWI 规范。未来的无线通讯平台将不会支付和 MIDP2.0 规范,而且必须要符合 JTWI 规范。 • JTWI 主要分为两个部分:规定平台必须支持的 A

PI 、统一的应用程序执行环境。

Page 15: 《Java 程序设计之网络编程 》

19.1.6 JINI 技术 • JINI 是一种可以连接各种 java 平台的技术。不同

java 平台的程序经由 JINI ,能够彼此连接在一块,彼此分享对方的资源。其中, CLDC 需要 Gateway才能与 JINI 连接,原因在于他们没有 RMI 功能。而 CDC 可以实现 RMI Optional Packages 以取得 RMI 功能。 Smart Card 平台由于其特性使然,并没有经由 JINI 与其他 Java 版本的应用程序做沟通,只是在 JINI 所造成的广大分布式环境中作为认证用。

Page 16: 《Java 程序设计之网络编程 》
Page 17: 《Java 程序设计之网络编程 》

• Jini 基础建设的核心包含以下几个部分: • Discovery Protocol :提供了如何让网路上任何种类的资源加入联盟的方式。• eXtended RMI : Jini 的元件彼此沟通时所使用的机制。• Distributed Security :定义了 Jini 联盟成员的使用权限。• Lookup Service :用来展现联盟中的所有成员,以及帮助使用者寻找网路资源,或者负责提供联盟中的资源给使用者用。

Page 18: 《Java 程序设计之网络编程 》

19.1.7 Personal java • Personal Java 是正规 java 版本的一个分支,其目的是能够让 pda 或手机执行 java 程序,目前在

PocketPC 或 Symbian OS 上都可以开发 Personal Java 应用程序。

• Personal Java 规范并不属于 J2ME 的 CLDC 或者是 CDC ,虽然最后它将会够归到 CDC 的 Personal Profile 融合,但是目前其规范还是继续在发展中。之所以有这种情况,是因为长期以来已经有许多围绕着 Personal Java 的规范所实现出来的商业产品。

Page 19: 《Java 程序设计之网络编程 》

J ava2 Pl atf ormJ ava Pl atform

J ava1. 0OAK J ava1. 1 J ava1. 2 J ava1. 3

PersonalJ ava1. 0

PersonalJ ava1. 2

PersonalJ ava1. 1

EmbeddedJ ava

Page 20: 《Java 程序设计之网络编程 》

19.2 MIDP 应用程序开发 • 这里讨论的 J2ME 无线应用开发主要是基于 CLD

C/MIDP 的开发,其应用程序可运行于移植有 KVM 的手机、 PDA等,这类设备由 MIDP 定义,即移动信息设备( MID ),可看作垂直应用市场。

• MIDP 应用程序的运行可以在模拟器上进行,也可以把应用程序通过 IrDA 、 RS232 或 OTA等方式之一下载到目标设备上运行,通常情况下都是在模拟器上运行。

Page 21: 《Java 程序设计之网络编程 》

• 本部分采用的开发环境是 Sun公司的 J2ME Wireless Toolkit 2.2 ,大家可以在 Sun公司网站上免费下载。其中,包含了程序运行需要的模拟器。当然,大家也可以采用其他功能更强大的开发工具,比如: Jbuilder 、 Eclipse 等可视化开发工具。 J2ME Wireless Toolkit 的安装非常简单,只需要大家根按照提示一步一步的安装。

Page 22: 《Java 程序设计之网络编程 》

19.2.1 新建并运行 MIDP 程序 • 第一步:我们通过开始菜单,启动 J2ME Wireles

s Toolkit 2.2 工具集中的 KtoolBar • 第二步:然后点击 New Project 按钮,在弹出的输入框中输入 Project Name 为 HelloWorld , MI

Dlet Class Name 为 Hello 。 • 第三步:点击 Create Project ,开始生成项目,工具会弹出 MIDP配置简表。

Page 23: 《Java 程序设计之网络编程 》

• 第四步:这里接受生成的默认值(以后还可以修改)点击 OK ,工具提示我们把写好的 Java 源程序放到 [WTK_HOME]\apps\HelloWorld\src 目录之下

• 第五步:用程序编辑器编辑程序 Hello.java ,并保存到 [WTK_HOME]\apps\HelloWorld\src 目录之下。

• 第六步:保存好了之后,点击 Build 按钮,工具会为你编译程序。 • 第七步:再点击 Run按钮,会弹出一个手机界面,显示程序运行结果。

Page 24: 《Java 程序设计之网络编程 》

19.2.2 综合示例 // 应用程序生命周期,和 J2SE 一样,包 java.lang.* 是默认加载的import javax.microedition.midlet.*; //MIDP 用户界面import javax.microedition.lcdui.*; public class Hello extends MIDlet implements CommandListener {private Display display; // 引用 MIDlet 的 Display 对象private TextBox textBox; // Textbox 显示一条消息private Command cmdExit; // 设定按钮用于退出 MIDletpublic Hello() { // MIDlet 构造程序display = Display.getDisplay(this);cmdExit = new Command("Exit", Command.SCREEN, 1);textBox = new TextBox("My First MIDlet", "Hello, J2ME! ", 50, 0);textBox.addCommand(cmdExit);textBox.setCommandListener(this);}// 必须要实现的接口,被应用管理软件调用来启动 MIDletpublic void startApp() { display.setCurrent(textBox); }public void pauseApp() { } // 必须要实现的接口public void destroyApp(boolean unconditional) { } // 必须要实现的接口//检查一下是否选择了退出命令public void commandAction(Command c, Displayable d) { if (c == cmdExit) {destroyApp(false); notifyDestroyed();}}}

Page 25: 《Java 程序设计之网络编程 》

import javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class Test extends MIDlet implements CommandListener {private TextBox textbox; // Textbox 显示一条消息private Display disp; // 引用 MIDlet 的 Display 对象private Command cmdExit; // 设定按钮用于退出 MIDletprivate Command cmdOK; // 确定按钮private Alert alt; // 信息提示对象public Test() {super();disp = Display.getDisplay(this); // 获得当前MIDlet 的 Display 对象cmdExit = new Command(" 退出 ", Command.SCREEN, 1); // 新建两个控制按钮cmdOK = new Command(" 阅读 ", Command.OK, 1);textbox = new TextBox(" 请输入待阅项目序号 :", "", 40, 0); // 新建文本框textbox.addCommand(cmdExit); // 添加控制按钮textbox.addCommand(cmdOK);textbox.setCommandListener(this); // 开始侦听命令}

Page 26: 《Java 程序设计之网络编程 》

protected void startApp() throws MIDletStateChangeException {alt = new Alert(" 登鹳雀楼 ");// 开始运行时显示信息,新建信息框对象// 设置显示字符串alt.setString(" 作者:(唐)王之涣 ");alt.setType(AlertType.INFO); // 设置为普通阅读信息框alt.setTimeout(Alert.FOREVER); // 信息窗口在按下 DONE 键后才能进入下一页面disp.setCurrent(alt, textbox); // 显示信息窗口}protected void pauseApp() {}protected void destroyApp(boolean arg0){}public void commandAction(Command arg0, Displayable arg1){if (arg0 == cmdExit) { // 按下退出键时停止运行destroyApp(false);notifyDestroyed();}if (arg0 == cmdOK) { // 按下阅读键后阅读对应信息TextBox textbox = (TextBox)arg1; // 得到用户输入的内容String sInfo = textbox.getString();

Page 27: 《Java 程序设计之网络编程 》

if (sInfo.equals("1") || sInfo.equals("2") || sInfo.equals("3") || sInfo.equals("4")) { // 显示项目 1 的内容// 根据所选项目选择要显示的内容if (sInfo.equals("1")) alt.setString(" 白日依山尽 ");if (sInfo.equals("2")) alt.setString(" 黄河入海流 ");if (sInfo.equals("3")) alt.setString(" 欲穷千里目 ");if (sInfo.equals("4")) alt.setString(" 更上一层楼 ");alt.setTitle(" 您正在阅读短信 " + sInfo); // 设置标题}else{alt.setString(" 很抱歉,暂时还没有您选择的项目,请重新输入! ");alt.setTitle(" 错误警告 "); // 设置标题}alt.setType(AlertType.INFO); // 设置为普通阅读信息框alt.setTimeout(Alert.FOREVER); // 信息窗口在按下 DONE 键后进入下一页面disp.setCurrent(alt, textbox); // 显示信息窗口}}}