1 / 27

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

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

opal
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 《Java程序设计之网络编程》 教学课件 重庆大学计算机学院 电子邮件:lizhx@126.com

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

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

  4. 19.1 J2ME概述 • J2ME是JAVA2的微型版本只支持JAVA标准规范中所定义的核心类函数库的子集。比如,J2ME CLDC的规范之中,只支持java.lang.*,java.io.*,以及java.util.*的类函数库。并加入了一些支持嵌入式系统的扩展类函数库,如:javax.meicroedition.io.*类函数库。但是并不支持所有的JAVA基本类。

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

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

  7. 规定这类型的设备如果要能执行Java程序,则必须满足某些特定条件(CPU速度、内存、联机速度),这些必须满足的条件就定义在Connected Limited Device Configuration(CLDC)规范之中。 • 另外一种设备则称为Connoced evice(可连接、资源相对无限的设备),这种设备要能够执行Java程序的规范则定义在Connected Device Configuration(CDC)规范里面。

  8. 19.1.3 Profile • Profile是架构在Configuration之上的规范。所以每种Profile都会声明它是根植于哪种Configuration的。之所以有Profile的出现,是为了要更明确的区分出各种嵌入式设备之上的Java程序该如何开发,以及它们应该具有哪些功能。因此Profile中定义了与特定嵌入式设备非常相关的扩充类库。

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

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

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

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

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

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

  15. 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的规范所实现出来的商业产品。

  16. 19.2 MIDP应用程序开发 • 这里讨论的J2ME无线应用开发主要是基于CLDC/MIDP的开发,其应用程序可运行于移植有KVM的手机、PDA等,这类设备由MIDP定义,即移动信息设备(MID),可看作垂直应用市场。 • MIDP应用程序的运行可以在模拟器上进行,也可以把应用程序通过IrDA、RS232或OTA等方式之一下载到目标设备上运行,通常情况下都是在模拟器上运行。

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

  18. 19.2.1 新建并运行MIDP程序 • 第一步:我们通过开始菜单,启动J2ME Wireless Toolkit 2.2工具集中的KtoolBar • 第二步:然后点击New Project按钮,在弹出的输入框中输入Project Name为HelloWorld,MIDlet Class Name为Hello。 • 第三步:点击Create Project,开始生成项目,工具会弹出MIDP配置简表。

  19. 第四步:这里接受生成的默认值(以后还可以修改)点击OK,工具提示我们把写好的Java源程序放到[WTK_HOME]\apps\HelloWorld\src目录之下第四步:这里接受生成的默认值(以后还可以修改)点击OK,工具提示我们把写好的Java源程序放到[WTK_HOME]\apps\HelloWorld\src目录之下 • 第五步:用程序编辑器编辑程序Hello.java,并保存到[WTK_HOME]\apps\HelloWorld\src目录之下。 • 第六步:保存好了之后,点击Build按钮,工具会为你编译程序。 • 第七步:再点击Run按钮,会弹出一个手机界面,显示程序运行结果。

  20. 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; // 设定按钮用于退出MIDlet public 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); } // 必须要实现的接口,被应用管理软件调用来启动MIDlet public 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();}}}

  21. 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; // 设定按钮用于退出MIDlet private 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); // 开始侦听命令 }

  22. 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();

  23. 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); // 显示信息窗口 } } }

More Related