




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 Java小应用程序和ActiveX控件,Java概述 Java小应用程序 ActiveX控件,3.1 Java概述,Java语言是由Sun公司于1995年推出的一种新的编程语言,它是一种跨平台、适合于分布式计算环境的纯面向对象语言。Java语言及其扩展正在逐步成为互联网应用的规范。本节主要介绍Java语言的起源、特点、简单示例等。,2/88,Java语言的起源和发展 Java语言的特点 Java程序的运行,Java语言的起源和发展,3/88,Java总是和C+联系在一起,而C+则是从C语言派生而来的,所以Java语言继承了这两种语言的大部分特性。Java的语法是从C继承的,Java许多
2、面向对象特性都受到C+的影响。事实上,Java中几个自定义的特性都来自于或可以追溯到它的这些前驱语言。略有不同的是,Java语言完全面向对象,从而摒弃了二者的不足之处。Java语言的诞生与过去约30年中计算机语言的不断改进和发展密切相关。基于这些原因,下面我们将简要介绍一下这个发展历程。,Java语言的起源,4/88,Java是由James Gosling、Patrick Naughton、Chris Warth、Ed Frank以及Mike Sheridan等人于1991年在Sun Microsystems公司设计出来的,开发第一个版本花了18个月时间。该语言最初名叫“Oak”,后来发现“O
3、ak”已经是Sun公司另外一种语言的注册商标,于1995年更名为“Java”,即太平洋上一个盛产咖啡的岛屿的名字。从1992 的秋天Oak问世,到1995年春天公开发布Java语言,许多人都对Java的设计和改进做出了贡献。,Java语言的发展,5/88,自从于1995年被正式推出之后,Java语言就以其独特的优势迅猛发展,经过短短8、9年时间,成为迄今为止最为优秀的面向对象语言。Java也从当初的一种语言而逐渐形成一种产业,基于Java语言的J2EE架构已成为微软.NET平台的强大竞争对手。 当初,Java语言最初的发布不亚于一场革命,但是它并不标志着Java快速革新时代的结束。在Java
4、1.0发布后不久,Java的设计者就已经制定出了Java 1.1、 Java 1.2、 Java 1.3、 Java 1.4 版。,Java技术主要包括三个方面:J2SE(Java2 Standard Edition)标准版,J2ME(Java2 Micro Edition)精简版,J2EE(Enterprise)企业版,6/91,Java受到了业界的广泛支持,IBM, pple, DEC, Adobe, HP, Oracle, Toshiba, Netscape, Microsoft等大公司都已经购买了Java语言的许可证。 Microsoft公司从其浏览器的3.0版开始增加了对Java的支
5、持。,语言特点概述,7/88,1Java的灵魂:字节码 2Java的内涵:丰富的类库,Java是一种被广泛使用的网络编程语言,这是一种新的计算概念。网络环境下的编程语言最需要解决的是可移植性和安全性问题。以字节方式进行编码,使得程序不受运行平台和环境的限制成为可能。Java语言还提供了丰富的类库,使程序设计人员可以很方便地调用相关类建立起自己的系统。主要表现在:,Java语言的特点,Java语言的具体特点,8/88,1.简单性 2.面向对象 3.分布性 4.鲁棒性 (健壮性) 5.可移植性,Java作为一种高级程序设计语言,它除具有面向对象、编写简单、脱离机器结构、具有分布性、鲁棒性、可移植性
6、、安全性特点外,并且提供了并发机制,解释执行具有很高的性能。同时,还具有动态性特点。主要表现在:,6.安全性 7.平台无关性 8.高性能 9.多线程 10.动态性,Java和C/C+的比较,9/88,对于变量声明、参数传递、操作符、流控制等,Java使用了和C/C+相同的风格,这使得熟悉C/C+的程序员能很方便地进行编程语言切换。同时,Java实现并加强了其简单、鲁棒、安全等特性,也摒弃了C和C+中许多不合理的地方。主要表现在:,1.面向对象/过程 2.重载操作符 3.内存管理 4.指针,5.多重继承/接口 6.类型转换/安全 7.控制语句 8.屏幕输出(System.out),C-D。Jav
7、a是目前面向对象编程的最好语言,Java基于C+,所以它与C+语言关系密切。然而,为了使Java语言更小、更简单,在设计Java时,将C+的某些部分去除了。其它的C+特性在Java中重新进行了设计,Java中还包含了一些不属于C+的结构 面向对象/过程 C+最初作为C语言的扩展,是为了支持面向对象编程。因为它包含了C语言的全部内容,所以C+既支持面向过程编程也支持面向对象编程。然而Java不支持面向过程编程。在实际应用中,这意味着Java中的子程序只能作为方法出现,并且该方法定义在类的定义中;数据定义也是如此。所以,所有的数据和功能都与类相关,进而与对象相关。,10/91,Java和C/C+的
8、比较,11/88,2.重载操作符 C+允许用户定义新的操作,这些新的操作由已经存在的操作符号指定,比如可以重载和的定义,为了简单起见,Java不允许用户定义重载的操作符 3. 内存管理 C+中,用户程序既可以分配又可以释放堆的存储空间,这会导致各种各样的编程问题,包括可能悬摆指针(注解)。悬摆指针是一个指向内存单元的指针,这个内存单元在前面使用过,现在已被显式释放,但将来可能重新分配使用。 如果将堆空间释放交给系统而不是用户来完成,那么这些问题就可以避免。 Java中,所有的堆空间释放是隐式的,使用垃圾收集技术来回收隐式释放的堆空间,悬摆指针就是其指向的对象已经释放的指针,但指针的值没有变,依
9、旧指向原来的内存单元,而此时这里存放的内容是不能确定的,如果程序员错误的使用该指针,就会导致难以确定的问题。,12/91,Java和C/C+的比较,13/88,4.指针 C+的一个重要特征是它的指针,但同时指针也是非常危险的。 Java不包含指针,但提供引用,它的引用和C+的引用不同:Java中的引用变量用来引用对象而不是内存单元,所以它们不能用作算数运算的操作数,加上没有堆对象释放操作符,使得引用比C+中的指针要安全得多 5.多重继承/接口 C+中用户程序可以定义一个类来扩展两个或多个不同的类,从而实现多重继承。尽管多重继承很方便,但是程序设计的复杂性使得其往往难以理解。 Java不支持多重
10、继承,取而代之的是Java中的接口,使用接口来提供一些多重继承的功能,Java和C/C+的比较,14/88,6.类型转换/安全 在C+中,将一种数字类型的值赋给其它数字类型的变量是合法的,这被称为强制转换,这些强制转换中有一半是收缩转换,即从复杂类型到简单类型的转换,这时往往不可能在新的类型中将值转换为它的近似值,例如,C+中将float值赋给int变量是合法的,如果float值是1.23E15,将它转换成int值时,得不到它的近似值,这就是一个收缩转换。 Java不允许赋值语句存在收缩转换,在语法上,这样的赋值语句是不合法的。所以Java编写的程序总体上比C+编写的更安全,Java和C/C+
11、的比较,15/88,7.控制语句 Java的控制语句与C+几乎一样。只是Java控制语句中的表达式必须具有布尔值,而在C+中控制表达式可以是布尔值也可以是数字类型 8.屏幕输出(System.out) 从Java应用程序到屏幕的输出通过对象System.out完成,这表示控制台窗口与应用程序进行了关联,这个对象有两个方法:print/println,它们完成打印功能,控制语句用于控制程序的流程, 以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有九种控制语句。 可分成以下三类:(1). 条件判断语句if语句、switch语句;(2) .循环执行语句do while语句、while语
12、句、for语句;(3). 转向语句break语句、goto语句(此语句尽量少用,因为这不利结构化程序设计,滥用它会使程序流程无规律、可读性差)、continue语句、return语句。 C:printf函数:控制台程序使用,16/91,Java的命名规则,17/88,类名和接口名的首字母大写 变量名和方法名的首字母小写 包名的所有字母均小写 常量名的所有字母均大写,其中使用下划线作为分隔符 当名称包含多个单词的时候,除了包名和常量名,所有嵌入单词的首字母均为大写 除了常量名,所有嵌入的单词除了首字母大写之外,其余字母均小写,18/88,编写并运行Java程序,需要Java开发工具包(JDK,J
13、ava Development Kit)的支持。因此在编写自己的第一个Java程序前,需要先在自己的机器上安装JDK。到目前为止,JDK的发展经历了JDK 1.0、JDK 1.1、JDK 1.2、JDK 1.3、JDK 1.4、 JDK 1.5等几个版本。,1)Java运行环境的安装与配置,Java程序的运行,19/88,1)Java运行环境的安装与配置 2) Java程序的编译及运行 3)两种类型的Java程序 4)Java环境的有关工具 5)Java程序的编写开发工具,由于Java是采用Java虚拟机进行解释执行的编程语言,它需要一定的软件支撑环境才能够运行起来。本节将先介绍Java的运行
14、环境,然后介绍Java程序的编写。,20/91,Step1: 安装 将jdk1.6安装到一指定的Java目录(比如D:java) Step2: 配置 设置环境变量(我的电脑属性高级环境变量) set JAVA_HOME=D:java set PATH=%PATH%;%JAVA_HOME%bin Step3: 测试 打开控制台,运行java, 观察是否显示帮助信息; 打开控制台,运行javac编译下节所示程序,看是否成功。,21/91,为什么要设置环境变量? PATH: 使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah JAVA_HOME: 为了方便引用:
15、需要使用JDK安装目录的时候只需输入JAVA_HOME即可避免每次引用都输入很长的路径串 归一原则:当JDK路径改变的时候仅需更改JAVA_HOME的变量值即可;否则就要更改任何用绝对路径引用JDK目录的文档;要是万一没有改全以至某个程序找不到JDK,将导致系统崩溃 第三方软件会引用约定好的JAVA_HOME变量,否则你不能正常使用该软件,第一个Java程序,22/88,下面是一个经典的Java入门程序,虽然只有短短几行代码,但其中的内容却很丰富,后面将作具体说明: public class HelloWorldApp public static void main (String args)
16、 / Output the first sentence: System.out.println(Hello World!); 此程序的作用是输出下面一行信息: Hello World!,2)Java程序的编译及运行,声明一个新的类,新的类是公共类,整个类定义由大括号对括起来,定义一个main()方法,表示访问权限,所有的类都可以使用这一方法,该方法是一个类方法(不是实例方法),通过类名直接调用,不返回任何值,关于main()方法,23/88,对于一个应用程序来说,main( )方法是必需的,而且必须按照如下的格式来定义。 public static void main (String arg
17、s) main( )是执行程序的入口。 main( )方法只能有一个。 String args是传递给main()方法的参数。参数可以为0个或多个,多个参数间用逗号分隔。 Java程序可以多类多方法,但最多只有一个公共类,在小应用程序中它必须继承java.applet.Applet类(不可缺少,是主类)。,Java程序中可以定义多个类,每个类中可以定义多个方法,但是最多只有一个公共类,在小应用程序中,它必须继承java.applet.Applet类,这样的类在小应用程序中是不可缺少的,通常被称为小应用程序的主类。 在main()方法定义中的,括号中的String args是传递给main()方
18、法的参数,参数名为args,它是类String的一个实例,参数可以为0个或多个,每个参数用“类名参数名”来指定,多个参数间用逗号分隔。,24/91,25/88,首先,将其保存到一个名为HelloWorldApp.java的文件中。注意:文件名应该与类名相同,因为Java解释器要求公共类必须放在与其同名的文件中。然后,对它进行编译。 D:Javajavac HelloWorldApp.java 编译的结果是生成字节码文件HelloWorldApp.class。Java Applet源程序的文件名必须与该public类的类名完全一致(包括大小写),编译及运行,最后,使用java命令来运行该字节码文
19、件。 D:Javajava HelloWorldApp 其结果就是在显示器上显示出“Hello World!”这行文字。,演示,3)Java环境的有关工具,26/88,Java提供了一些常用的语言工具,主要包括: 1) javac:编译器,用于将.Java源程序编译为跨平台的.class字节码文件 2) java:解释器,用于解释运行Java字节码 3) appletviewer:小应用程序浏览器 4) javah:头文件生成器 5) javadoc:API文档生成器 6) javap:类文件反汇编器 7) jdb:Java语言调试器 这些文件包括在/java/bin/目录中,并可以在任何目录
20、中运行,前提是设置了运行程序的相应系统路径。,4)Java程序的编写开发工具,27/88,对于一般简单程序的编写,几乎使用任何文本编辑器都可以进行。例如操作系统所带的记事本、写字板等程序。 如果要进行比较复杂的Java应用系统开发,可使用专门的Java集成开发工具,如JBuilder、Visual J+、Visual Age、JCreator等。其中优秀的开发工具支持与应用服务如BEA WebLogic、IBM WebSphere的集成。具体选用哪种开发工具要视项目的具体情况而定。,推荐:eclipse, JCreator,5)两种类型的Java程序,28/88,在Java中可以编写两类程序:
21、应用程序(applications)和Java Applet(小应用程序)。 应用程序是可以在控制台上直接运行的程序,在创建应用程序时,Java与其他高级编程语言没有太大区别 Java的特色就在于它具有编制小应用程序的功能。小应用程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。 小应用程序实际上就是小型的Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,它与其他文件的重要差别是,小应用程序是一个智能的程序,能对用户的输入作出反应,并且能动态变化,能控制动画或声音的播放。,29/88,3.2 Java Applet,对于web专业人员来说,熟悉
22、java applet是必要的。 Applet类被包含在名叫java.applet的类库里,它提供了一些方法,使用它们可以在小应用程序的执行过程中进行更严密的控制。除此以外,java.applet还定义了一些接口,例如:AppletContext、AudioClip和AppletStub等. 所有的小应用程序都是Applet类的子类。因此,所有的小应用程序都必须引用java.applet类库。既然所有的小应用程序都运行在一个窗口中,那么引入对这个窗口的支持类库(java.awt)就是必不可少的。 小应用程序并非基于控制台的Java运行环境的解释器所执行的,而是由Web浏览器或小应用程序阅读器执
23、行。标准的小应用程序阅读器是appletviewer,appletviewer由JDK(java开发工具)提供。使用者能够按自己的喜好选择任何小应用程序阅读器或浏览器。,Java小程序为Web文档中的计算提供了另外一种方式。applet可以通过图形用户界面(GUI)组件,以及图像和计算为文档提供交互能力和动态内容。到2002年,人们对applet初期的热情已经严重消退,另外一些技术特别是一些脚本语言,已经在很多应用领域取代了applet,而且java在服务器端编程中的应用已经超过了在客户端编程中的应用,但是,目前某些传统的web站点仍然包含java applet,也有人正在编写java app
24、let,所以,对于web专业人员来说,熟悉java applet还是有必要的。 所有的applet都有一些标准操作,这些通用操作的协议被收集起来构成了预定义类中Applet的方法定义,所有由用户定义的applet都是它的子类,30/91,Java Applet的编制和运行,31/88,applet类的头部格式:public class class_name extends Applet .,import java.applet.*; /引入小应用程序包 import java.awt.*; /引入抽象视窗工具包awt public class HelloWorldApplet extends
25、Applet / This is an applet. public void paint(Graphics g) g.drawString(Hello World!, 30, 30); ,第一步:创建Java Applet源程序 例子:,程序中可以直接使用该包中类和接口,不用给出类所属的完整的包名;否则只是在使用Applet类时可以省略完整包名,使用java.applet包中的其它类或接口时还需要写完整的包名。所以一般简单起见,直接用“*“引入,Java Applet的编制和运行,32/88,import java.applet.*; /引入小应用程序包 import java.awt.*;
26、 /引入抽象视窗工具包awt public class HelloWorldApplet extends Applet / This is an applet. public void paint(Graphics g) g.drawString(Hello World!, 30, 30); 该程序的功能是:在坐标(30,30)处输出字符串“Hello World!”。 在这个程序中,没有实现main( )方法,这是Applet与Application(应用程序)的区别之一。,第一步:创建Java Applet源程序(续) 例子:,Java Applet的编制和运行,33/88,为了运行该程序
27、,首先也应将其保存到一个名为HelloWorldApplet.java的文件中,然后对其进行编译: D:Javajavac HelloWorldApplet.java (演示) 这样将得到字节码文件HelloWorldApplet.class。 第三步:将Java Applet嵌入WEB文档 由于Applet中没有main( )方法作为Java解释器的入口,我们必须编写HTML文件,然后将Applet嵌入其中,接着使用appletviewer来运行,或在支持Java的浏览器上运行。,第二步:编译applet,34/91,指明字节码所在的文件,该HTML文件如下: An Applet 最后,我们
28、将此HTML文件存入AppExp.htm,然后运行。 使用标记来启动HelloWorldApplet,code属性指明字节码所在的文件,width和height属性指明applet所占区域范围。,启动HelloWorldApplet,35/88,三种执行方式: (1)只要小应用程序经过编译,它就能被包含在一个HTML文件中,并使用APPLET标记。这之后当支持Java的Web浏览器遇到HTML文件中的APPLET标记时,小应用程序就能被执行。 (2)小应用程序阅读器也可通过直接执行*.html页面执行小应用程序:避免由于浏览器的设置而导致的不能正常运行 (3)为了更方便地观察和测试小应用程序,
29、只需在编制的Java源程序代码的头部加入一个包含APPLET标记的注释即可。用这种方法,代码就能用小应用程序所需的HTML语句记述下来,这样,只要启动小应用程序阅读器并指定Java源代码文件为目标文件,就可以测试经过编译的小应用程序了。(不需要将applet嵌入到html文件中),36/91,测试Java Applet的三种方式: 第一种测试小程序的办法是嵌到网页中,用浏览器测试.,1,37/91,2,第二种是用appletviewer查看html文件: D:Javaappletviewer AppExp.htm 此时,将弹出一个Applet浏览窗口,在其中指定区域显示“Hello World
30、!”。 (注意:appletviewer此时只支持applet标签),38/91,第三种办法:不用嵌到网页里,直接用appletviewer测试java源码只需在源程序开始处加入 标签的原型注释.,/* */ 然后进行编译, 直接用appletviewer 测试 *.java,3,演示:appletviewer HelloWorldAppletComment.java,39/88,程序入口: 与大多数程序不同的是,一个小应用程序的执行不是从main( )开始的。实际上,没有多少小应用程序使用main( ),小应用程序的执行用一种完全不同的机制启动和控制。 输入输出: 小应用程序窗口的输出并不是
31、由函数System.out.println()完成的,而是由各种不同的AWT方法来实现,例如drawString(),这个方法可以向窗口的某个由X、Y坐标决定的特定位置输出一个字符串。同样的,小应用程序窗口的输入与一般的应用程序不同。,Applet嵌入Web方式(1),40/91, ,1)codebase:字节码文件相对于Web文档的路径 2)code:Applet字节码文件名称 3)其他属性 例:两种运行方式: (1)浏览器 (注意两种显示方式的区别)(2)appletviewer example3-1-1.html,Applet嵌入Web方式(2),41/91, ,1)codebase:字
32、节码文件相对于Web文档的路径 2)code:Applet字节码文件名称 3)其他属性 第二种是用object标签在页面中嵌入java小应用程序 此时不能用appletview查看该html文件,因为appletview只认识applet标签 例,Applet嵌入Web方式(3),42/91,10. object11. classid = “clsid:CAFEEFAC-0015-0000-0000-ABCDEFFEDCBA”12. codebase = 13. “ WIDTH = “400” HEIGHT = “400” NAME = “TestApplet” ALIGN = “middle
33、” VSPACE =15. “0” HSPACE = “0” 16. PARAM NAME = CODE VALUE = “game.TypeTrainApplet.class” 17. PARAM NAME = CODEBASE VALUE = “.” 18. PARAM NAME = ARCHIVE VALUE = “game.JAR” 19. PARAM NAME = NAME VALUE = “TestApplet” 20. param name = “type” value = “application/x-java-applet;jpi-version=1.5”21. param
34、name = “scriptable” value = “false”22. PARAM NAME = “stepLen” VALUE=“2”23. PARAM NAME = “stepInterval” VALUE=“50”24. PARAM NAME = “columnCount” VALUE=“10”25. PARAM NAME = “generateInterval” VALUE=“500”26.,指定了下载JRE插件的地址,如果没有安装这样的版本,将自动下载当前 JRE 1.5 系列的缺省下载版本,如果不能自动安装,则将用户引导到下载页面中,用户可以手工下载JRE,下载页面在第44行
35、指定。,43/91,在以object标签嵌入java applet的时候,需要浏览器安装了相应版本的java plugin。由于客户端浏览器不一定都支持所需版本的java plugin,我们可以书写代码使得不能正常运行小应用程序的浏览器自动下载相应版本的java plugin,下载完后自动运行小应用程序,第13行指定了下载JRE插件的地址,如果没有安装这样的版本,将自动下载当前 JRE 1.5 系列的缺省下载版本,如果不能自动安装,则将用户引导到下载页面中,用户可以手工下载JRE,下载页面在第44行指定。 以上代码的详细解释参见: ,44/91,45/91,27. comment28. emb
36、ed29. type = application/x-java-applet;jpi-version=1.5 30. CODE = game.TypeTrainApplet.class 31. JAVA_CODEBASE = . 32. ARCHIVE = game.JAR 33. NAME = TestApplet 34. WIDTH = 400 35. HEIGHT = 400 36. ALIGN = middle 37. VSPACE = 0 38. HSPACE = 0 39. stepLen =2 40. stepInterval =50 41. columnCount =10 42
37、. generateInterval =50043. scriptable = false44. pluginspage = noembed46. 47. /noembed48. /embed49. /comment50. /object,指定下载页面,标签的属性,name: 给applet取名,该名字可用于同页面applet之间的通信。若省略该属性,则applet的名字对应其类名 width, height: 以像素为单位指定 applet 的宽度和高度。 code: 指定包含该 applet 的 Java 代码的文件。(必选) codebase: 标识包含选定 applet 的文件夹。 a
38、lign: 确定对象在页面上的对齐方式。 alt: 指定在用户的浏览器不支持 Java applet 或者已禁用 Java 的情况下将要显示的替代内容。 archive: 指明同一个codebase中需预先下载的文件 例,46/91,Applet与JAR文件,JAR文件概述 JAR(Java Archive)是一种与平台无关的文档格式,一般叫Java存档,它相当于一种压缩格式,可以把众多的文档合成一个文件。 大多数的Applet都由多个类组成,使用浏览器来浏览这样的Applet时,由于一个类文件需要一个连接,所以浏览器需要使用多个连接,这样在一个低速的网络上加载一个Applet需要好几分钟。这
39、里值得注意的是,加载Applet需要较长的时间的原因并不是因为类文件太大,关键的原因是建立到服务器的连接需要的时间长。 对于Applet来说,JAR文件可以将多个需要的类文件合并为一个单一的文件。这是很有意义的,这样这些类文件可以作为一个整体使用一个HTTP事务下载到浏览器中,从而大大提高浏览速度。,47/91,archives往往用到jar文件。这里先简单介绍一下jar文件。 一个 applet 通常由许多 Java .class 文件组成。对于每个类文件,类加载器必须打开一个从浏览器到 applet 代码所在服务器的单独套接字连接。因此,如果您的 applet 由 18 个 .class
40、文件组成,浏览器必须至少打开 18 个套接字才能将每个文件传送到位。设置及断开每个连接的开销相当大。 所以如果能将所有 .class 文件都放在一个大文件中,这样只需建立一个连接即可下载整个 applet。,48/91,jar命令 jar命令格式如下: jar 选项1 选项n 文件名1 文件名2 jar命令的选项: c 创建新的存档,并把文件添加至其中,如果一个文件名是一个目 录,它将被递归处理 t 列出存档内容的列表 x 展开存档中的命名的(或所有的文件 u 更新已存在的存档 v 生成详细输出到标准输出上 f 指定存档文件名 m 包含来自标明文件的标明信息 0 只存储方式;未用ZIP压缩格式
41、 M 不产生所有项的清单(manifest文件 i 为指定的jar文件产生索引信息 C 改变到指定的目录,49/91,JAR缓存 在默认的情况下,浏览器使用浏览器的缓存来缓存Applet代码。在这种情况下,如果访问一个曾经访问过的包含了Applet的站点,并且浏览器缓存仍然包含所需要的JAR文件,并且这个JAR文件没有改变,那么这个JAR文件就不会被重新下载。 但是在正常情况下,浏览器缓存并不能够保持足够长的时间。比如,如果每个月只访问一次某个站点,那么极有可能每次都要重新下载并刷新缓存。 Java插件支持一种机制来“粘滞”Applet,如果我们想让一个Applet停留在用户端的时间更长,就需
42、要使用OBJECT标记来指定CACHE_OPTION、CACHE_ARCHIVE和CACHE_VERSION键的值。 CACHE_VERSION键用来代表CACHE_ARCHIVE列表中指定的JAR文件需要的版本号码。如果这些版本已经在客户机上,那他们将不必被下载。,50/91,Jar嵌入Web方式,51/91, ,1)codebase:字节码文件相对于Web文档的路径; 2)code:Applet字节码文件名称 3)其他属性 例 (解包:jar tf *.jar),标签的使用,52/91,标签的两个属性: name=parameter name参数的名字,如name=size value=p
43、arameter value参数的值,如value=36 语法: 所有的参数在小应用程序被下载时传递给它,可以在小应用程序的init( )方法中通过getParameter( )方法取得参数名对应的参数值 在用嵌入小应用程序时,可以通过标签向小应用程序传递参数,使用标签需要注意,53/91,无须配对使用 必须放在和标签之间 每个标签只能传递一个参数,但标签的个数没有限制 在中指定的参数名与getParameter( ) 中的参数名必须完全相同 如果小应用程序需要的参数web文档没有提供,getParameter( )将返回null。在程序中应判断这种情况,并提供合理的缺省值 用getParam
44、eter( )返回的是字符串 将html文件中的参数少赋一个值会如何?参数名不一样会如何? 例,Applet类,54/88,Applet类为小应用程序的执行如启动、中止等提供了所有必需的支持。它还提供了装载和显示图像的方法,以及装载和播放语音片断的方法。 Applet扩展了AWT类中的Panel; 依此类推,Panel扩展了类Container; Container扩展了Component。 这些类都为Java的基于窗口的图形接口提供了支持。这样,Applet为基于窗口的所有活动都提供了支持。,55/91,Applet扩展了AWT类中的Panel,Panel扩展了类Container,Cont
45、ainer扩展了Component,这些类都为Java的基于窗口的图形接口提供了支持。这样,Applet为基于窗口的所有活动都提供了支持.,Applet的体系结构,56/88,这4个方法必须包含,都从Applet类继承而来,几乎大多数的小应用程序都重载一套方法,这些方法提供了浏览器或小应用程序阅读器与小应用程序之间的接口以及前者对后者的执行进行控制的基本机制。这套方法中的四个:init( )、start( )、stop( )和destroy( )是由Applet所定义的。 另一个方法,paint( )是由AWT组件类定义的。所有这些方法的具体实现也都被提供。小应用程序并不需要重载那些它们没有用
46、到的方法。但是,只有非常简单的小应用程序才不需要定义全部的方法。这5个方法组成了程序的基本主框架。,1Applet主框架,一个applet必须包含4个最基本的方法,浏览器通过这4个方法来控制applet的运行,这4个方法都是从Applet类继承而来的。另外一个是paint方法基本框架,57/91,Applet的体系结构,58/88,当浏览器解释并显示某个XHTML/HTML文档并遇到一个applet时,会从服务器下载这个applet类的代码,并实例化该类,然后在一定事件发生时调用一定的方法。当一个小应用程序开始执行时,AWT就以如下顺序调用以下的方法: 1. init( ):对applet进行
47、某些初始化设置 2. start( ):开始执行applet的代码 3. paint( ) 当一个小应用程序被终止时,下列方法就按如下顺序被调用: 1. stop( ):当浏览器用户通过链接将浏览器从当前的页面定位到新页面时调用 2. destroy( ):关闭浏览器时调用,该方法执行清理工作,applet生命周期结束时可能需要进行这方面的操作,2Applet的初始化与终止,当浏览器从init方法返回,或从其它一些文档中返回到原来的文档时也将隐式地调用start方法,首先浏览器调用applet的init方法,对applet进行某些初始化设置。 浏览器从init方法返回后,接下来马上调用appl
48、et的start方法,这就开始执行applet的代码了。当浏览器用户从其它一些文档中返回到原来的文档时也将隐式地调用start方法。,59/91,60/88,在某些情况下,小应用程序可能需要覆盖另外一个AWT所定义的方法,即update()。 这个方法在小应用程序要求窗口的一部分被重画时被调用。 默认的update()的方法是先用默认的背景颜色填充小应用程序窗口,再调用paint()方法。 如果在填充背景时用的颜色与paint()方法中使用的不同,那么在每次update()被调用时,也就是只要窗口被重画时,用户将会感觉到默认背景的闪动。 避免这个问题的一种方法是重载update()方法,从而使
49、它完成所有必要的显示功能。然后,使paint()简单地调用update()。这样,在一些应用中,小应用程序将重载paint()和update(),如下所示。 public void update(Graphics g) / redisplay your window, here. public void paint(Graphics g) update(g); ,3重载update( )方法,61/88,public void init( ):初始化 这是被调用的第一个方法。是初始化变量的地方。这个方法在小应用程序运行期间仅被调用一次。它可以设置程序初始状态,载入图形、音频文件或字体,获取HT
50、ML中设定的参数等。用户定义的init方法将覆盖Applet类中的init()方法。 public void start( ):启动Applet 这是在init()之后被调用。它也在小应用程序被终止后重新启动时调用。该方法是小应用程序的主体,可以执行一些需要重复执行的任务或者重新激活一个线程,如开始播放动画或声音等。用户定义的start()方法将覆盖Applet类中的start()方法。 注意:Init()仅在小应用程序第一次被装载时调用一次,而start()却在每一次小应用程序的HTML文档被显示在屏幕上时都被调用。 如果用户离开一个网页之后重新进入时,小应用程序就会从哪里开始重新执行?从s
51、tart开始重新执行,上述方法的详细讨论如下:,当第一次浏览含有Applet的web页面时,浏览器将下载该applet,生成一个该applet主类的实例并调用init对applet进行初始化。,62/88,public void paint (Graphics g):绘制小应用程序显示区域 在每一次小应用程序的输出必须重画窗口时,paint()方法都被调用。 paint()方法也在小应用程序开始执行时被调用:执行完start()方法后调用paint()方法,以便在applet的显示区“绘画”。 paint方法不是Applet类的方法,而是Component类的方法,用于绘制组件。所以编程者需要
52、在小应用程序中import引入Graphics类或其所在的包,即 import java.awt.Graphics; 或import java.awt.*; paint()方法有一个Graphics 类型的参数。这个参数包含了图像上下文,描述了小应用程序所运行的环境。在需要对小应用程序进行输出时,这个上下文将被用到。 用户定义的paint()方法将覆盖Applet类的paint()方法(从java.awt.Graphics类中继承而来 ),63/88,public void stop( ): 停止applet的运行 当Web浏览器离开包含小应用程序的HTML文件时,stop()方法就被调用,如
53、在浏览器中去另一个页面时。 当stop()被调用时,小应用程序很可能在运行。应该使用stop()来挂起一些在小应用程序不可见时不需要运行的线程。当用户回到此页面时,就能重新启动它们。 用户定义的stop()方法将覆盖Applet类中的stop()方法。 如果小应用程序不包含动画、声音播放等相关的内容,一般不需要重写该方法 public void destroy( ): 销毁小应用程序 当环境决定了小应用程序需要完全从内存中移去时,destroy()方法被调用。 该方法将释放任何一个与系统无关的内存资源。 可在destroy方法中编写释放系统资源的代码,但除非用到了特殊的资源如创建的线程,否则一
54、般不需重写destroy方法,因为java运行系统本身会自动进行“垃圾”处理和内存回收管理工作。 stop()方法总是在destroy()之前被调用。,64/91,例:appletviewer AppletLife.java,初始态,运行态,停止态,消亡态,首次启动,构造-init(),start(),从活动转入非活动状态 stop(),从非活动转入活动状态 start(),关闭浏览器 destroy(),stop用来停止小应用程序的运行,可以在该方法中停止一些消耗系统资源的工作(如中断一个线程),以免影响系统的运行速度。 destroy方法的调用将使applet被永久性地删除,该方法将释放任
55、何一个与系统无关的内存资源。,65/91,下图说明了Applet的生命周期和对应的方法,Applet中的文件和文字操作,66/88,字体设置,67/88,从前面的介绍中我们已经知道,Graphics类的方法drawString( )可以在屏幕的指定位置显示一个字符串,而Java中还有一个类Font,使用它可以获得更加丰富多采和逼真精确的字体效果。 一个Font类的对象表示了一种字体的显示效果,包括字体类型、字型和字号。首先创建Font类对象,语法为: Font fontnew Font(font_type,font_style,font_size); 其中: font_type 字体类型,有:
56、“Courier”、“Symbol”、“Helvetica”和 “TimesRoman”等。 font_style 字体风格,有:Font.BOLD (粗体),Font.PLAIN (细体) 和Font.ITALIC (斜体) 等。 font_size 字体尺寸,用点数表示。 例如: Font Myfont=new Font(楷体,Font.BOLD,14); 其含义是创建一个名为Myfont的Font类:设置字体大小为14磅,类型为楷体,加粗型。,字体设置,68/88,创建Font对象后,就可用Graphics的setFont ( )方法设置当前字体,如: g.setFont(Myfont)
57、 / g是Graphics对象 以后在没有设置新的字体之前,都将会用这个已经设置好了的字体显示字体。 例:坐标原点在哪里?,颜色设置,69/88,(1)使用color类中预定义的颜色常量 使用Graphics类中的setColor()方法和Color类中预先定义的颜色值: g.setColor(Color.color_value); 例 (2)使用自定义的颜色值 * 首先须创建Color类的对象,语法: Color color=new Color(rvalue,gvalue,bvalue); rvalue - 红色的比例(范围为0-255) gvalue - 绿色的比例(范围为0-255) b
58、value - 蓝色的比例(范围为0-255) * 然后使用Graphics类中的setColor()方法设置当前色: g.setColor(color); 例 ? P56字体颜色为什么会变化?,70/88,外切矩形的左上角坐标,在Graphics类中定义了一些绘图方法,在绘制图形时以当前前景色来绘制和填充,黑色是默认的颜色。 当一个被绘制的图形对象的尺寸超出小应用程序窗口大小时,超出部分将会被自动剪去。 例1 例2 注:drawRect (int x, int y, int width, int height) drawOval (int x, int y, int width, int h
59、eight) drawPolygon (int xPoints, int yPoints, int nPoints ),简单图形的绘制,矩形的左上角坐标,一组顶点的X坐标,Y坐标,顶点数。第一个顶点和最后一个顶点可以重合(例example3-3-5-1.html),71/88,首先用Applet类的getImage( )方法创建Image类的一个实例,语法: Image img=getImage(URL, “image_file”) URL是指图像文件所在的URL位置: 如果图像文件与小应用程序字节码文件存放在同一个目录下,可用getCodeBase( )方法获得图像文件的URL; 如果图像文件与嵌入该小应用程序的Web文档存放在同一目录下,则可用getDocument
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年军迷用品项目合作计划书
- 2025年电冰箱塑料产品项目可行性研究报告
- 2025年熔断器项目可行性研究报告
- 2025年海霸鱼油项目可行性研究报告
- 2025年水霉清水产养殖用药项目可行性研究报告
- 2025年橡塑复合密封件项目可行性研究报告
- 2025年柔光白板项目可行性研究报告
- 2025年杜邦棉被项目可行性研究报告
- 2025年机械全自动砌块成型机项目可行性研究报告
- 2025年有机乳液产品项目可行性研究报告
- 冠脉介入进修汇报
- 沪教牛津八下Unit-3-Fishing-with-Birds2市公开课一等奖省赛课微课金奖课
- PDCA提高卧床患者踝泵运动的执行率
- 月考(Unit 1-2)(试题)-2023-2024学年人教PEP版英语三年级下册
- 汕头市金平区2024年数学八年级下册期末检测试题含解析
- 胸痛的护理诊断及措施
- 英语演讲与口才课程介绍
- 超声危急值课件
- 河南应用技术职业学院单招《职业技能测试》参考试题库(含答案)
- 2024年包头钢铁职业技术学院高职单招(英语/数学/语文)笔试题库含答案解析
- 高中预防校园欺凌
评论
0/150
提交评论