第12章 Java 小应用程序(Applet).ppt
《第12章 Java 小应用程序(Applet).ppt》由会员分享,可在线阅读,更多相关《第12章 Java 小应用程序(Applet).ppt(90页珍藏版)》请在三一办公上搜索。
1、第12章 Java 小应用程序(Applet)的设计,12.1 编写一个Applet 12.2 Applet的通信,12.1 编写一个Applet,要编写一个Applet,必须首先从java.applet.Applet派生一个类:import java.applet.*;public class SimpleApplet extends Applet 需要注意的是,派生出的Applet的类必须定义为public类型。java.applet.Applet类实际上是java.awt.Panel的子类。Applet和AWT类的继承关系如图12.1所示。,图 12.1,这种层次关系显示,一个Apple
2、t可直接用作一个AWT布局的容器。因为Applet是Panel的子类,所以它有一个缺省的流(Flow)布局管理器。Component,Container和Panel类的方法被Applet类继承了下来。12.1.1 Applet的执行框架 在Java出现之前,人们就已经开始使用HTML(超文本标记语言)进行Web页面的设计了。然而,对HTML稍有了解的人都知道,HTML所提供的设计能力是极其有限的。Java率先提供了让Web页面实现更丰富的GUI和逻辑运算能力的方法,这种方法是通过将一个Java的类插入到Web页面中来实现的。,如何编写一个Applet并令它在浏览器中执行呢?方法很简单,只要继承
3、java.applet包下的Applet类,并实现一些必要的方法即可。下面我们来看一个最简单的Applet的例子,并学会怎样在浏览器中令它运行。例12.1 SimpleApplet.java import java.applet.*;import java.awt.*;public class SimpleApplet extends Applet,String text=null;public void init()text=A simple applet demo!;setBackground(Color.YELLOW);public void start()System.out.prin
4、tln(starting.);public void stop(),System.out.println(stopping.);public void destroy()System.out.println(preparing to unload.);public void paint(Graphics g)System.out.println(Paint);,g.drawString(text,15,25);上面是一个最简单的Applet例子,大家可能已经发现,这个程序没有main()方法,的确,我们前面所学到的Java应用程序都必须由main()方法处进入,而在一个Applet中却不是这样
5、。Applet的生命周期稍微有些复杂,它需要通过浏览器来运行,所以为了执行它,还必须有一个HTML编写的Web页面。,例12.2 SimpleApplet.html,这里将不准备详细讨论有关HTML的问题,如果不太了解,可以自己查阅相关资料。我们只稍微解释一下上面的HTML代码。它通过标记和参数告诉浏览器下载执行一个Applet。其中,name这个参数表示Applet的名字;codebase表示编译好的Applet字节码的路径;code表示Applet文件的文件名;width和height指定了该Applet的宽度和高度。name和codebase这两个参数并不是必须的,如果Applet字节码
6、文件和html文件在同一路径下,则可以不加codebase参数。width和height这两个参数一定要加,所以在Applet程序中可以不需要设置Applet的Panel的大小。,把这个HTML文件和编译好的Applet保存在同一个目录下(HTML文件并不一定要和Applet同名),然后用浏览器打开这个HTML文件,将看到这个最简单的小应用程序的运行结果。除了通过浏览器来运行Applet,Java平台本身也提供了一个调试Applet的方法。在JDK包中带有一个小应用程序观察器AppletViewer.exe,只要在Windows命令行窗口中输入:appletviewer SimpleApple
7、t.html 就会看到和在浏览器中运行基本相同的输出结果。图12.2和图12.3分别列出了通过两种方式运行例子SimpleApplet的输出结果。,现在我们来看看这个Applet到底是如何运作的。大家可能已经注意到,在上面的例子SimpleApplet中,没有main()方法。一般的Java应用程序都是由main()方法处进入,而在Applet中却不是这样。在构造函数完成了它的任务后,浏览器将自动调用init()方法,所以通常把Applet的基本初始化操作放在这里。init()结束后,浏览器调用另一个称为start()的方法,start()通常在Applet成为可见时被调用。,start()方
8、法结束后,piant()方法会紧接着被调用来向Applet的Panel上绘图。这样,一个Applet就已经运行起来了。用户离开了Applet所在的页面时,stop()方法被调用停止Applet的一些工作。直到浏览器关闭时,destroy()方法才被调用来完成最后的清除工作。当然Applet的生命周期比上面所讨论的要稍微复杂一些。,图 12.2,图 12.3,12.1.2 Applet的安全机制 我们已经知道,Applet是通过浏览器下载并自动运行的,这听起来好像有些可怕,通过浏览器自动运行,这不正是病毒制造者的梦想吗。Applet的设计者可能会把Applet设计成一个病毒,并借助浏览器让它进入
9、用户的计算机。听起来很可怕,但Java的设计者们也考虑到了这一点,所以对Applet的能力做了种种限制,只要一个Applet试图违反安全条例,小应用程序安全管理器(Applet Security Manager)就会发出一个SecurityException(安全违例)消息。,那么到底哪些是Applet可以做的,哪些是不可以做的呢?小应用程序所能够控制的安全程度是在浏览器层次上实现的,小应用程序的安全机制通过沙箱(sandbox)控制。在大多数浏览器上,在沙箱内运行时,缺省地禁止以下操作:运行时执行另一程序:小应用程序绝不能运行任何一个本地可执行程序。任何文件的输入/输出:小应用程序不能读/写
10、本地计算机的文件系统。,调用任何本地方法:除了所用Java版本号,操作系统名和版本号,小应用程序不能获取任何与本地计算机有关的信息,也不能通过调用任何本地方法、API等方法获得。特别是,小应用程序不能获得用户名、电子邮件地址等等信息。尝试打开除提供Applet的主机之外的任何系统的Socket:除了下载它的服务器之外,小应用程序不能和任何一台主机通信。,这些限制的关键在于:通过限制Applet对系统文件的存取来阻止它侵犯一个远程系统的隐私或破坏该系统;禁止执行另一程序和不允许调用本地方法限制了Applet启动未经JVM检查的代码;对Socket的限制则禁止了与另一个可能有危害性的程序的通信。由
11、于小应用程序是由JVM(Java Virtual Machine)解释执行的字节码,而非由CPU直接执行的机器码,所以只要在JVM中检查了小应用程序的指令和程序区域,就可以确定,小应用程序不会对用户计算机系统造成较大的危害。表12.1显示了小应用程序在沙箱中运行时的功能。,表12.1 小应用程序的功能,在这些限制下,小应用程序的能力似乎大打折扣了,这对那些恶意的设计者是有效的措施,但是也给开发者们造成了限制。如果没有办法打破这些限制,那么小应用程序所能做的就太有限了。对此,Java的设计者也提供了解决办法,那就是签名类。小程序提供者可以编写一个带有签名的Applet,当浏览器下载并运行这个Ap
12、plet的时候,会提示用户这是一个签名Applet类,并询问用户是否信任该设计者。如果取得用户的信任,那么这个Applet就可以突破所有的限制,像一个普通应用程序那样在用户的计算机上运行了。,12.1.3 Applet的主要方法 Applet类的一些主要方法有:public void init()该方法在Applet被浏览器载入内存后自动调用,通常用来初始化数据的值。本方法只在Applet首次装入时被调用,并在调用start()方法前完成。假如要创建一个Applet生存期内的线程,就可以在该方法中创建,在destory方法中结束。,public void start()当init()方法完成后
13、,浏览器会自动调用start()方法。它的执行使得Applet成为活动的。并且每次Applet成为可见的时,它都要执行一次,如:当浏览器在被最小化后又恢复时,或者从其他web页返回含有这个Applet的页面时。通常我们把主要程序代码写在这里,这一方法的典型用法是启动动画和播放声音。,public void stop()当浏览器切换到另一个web页面或将要关闭时,会自动调用stop()方法。通常在该方法中加入一些暂停动作,例如暂停音乐或动画的播放,以便用户从其他Web页面切换回包含该Applet的页面时,可以通过调用start()方法继续播放下去。,public void destroy()用户
14、关闭浏览器时,必须终止Applet的运行,并回收资源。此时,destroy()方法会自动被调用。该方法是Applet在生存期中执行的最后一个方法,所以通常在这里释放一些在init()中分配的资源,如创建的线程等。浏览器在调用destory()方法时,会先调用一次stop()方法。,public AudioClip getAudioClip(URL url)返回由参数url所指定的AudioClip对象。AudioClip是一个音频剪辑对象的接口,它提供了音频对象的抽象控制。无论url指定的音乐文件是否存在,getAudioClip()方法都会很快返回值,因为音频文件要等到播放的时候才下载。ur
15、l参数指定的必须是一个绝对地址。public URL getCodeBase()返回Applet所在网址。public URL getDocumentBase()返回包含该Applet对象的Web页面的地址。,public Image getImage(URL url)返回参数url所指定的图片文件的Image对象。和getAudioClip()方法类似,不管指定地址的文件是否存在,getImage()方法都会立即返回值。图片文件在Applet显示在屏幕上时才会下载。url参数指定的必须是一个绝对地址。public String getParameter(String name)返回由HTML
16、文件所提供的参数信息。Applet提供了从Web页面文件中提取参数的方法,可以在HTML文件中通过标记设置一些参数供Applet使用,例如有如下的HTML代码:,调用getParameter(Color)将返回blue。注意参数名是不区分大小写的。public Boolean isActive()检查Applet是否处于活动状态。当浏览器调用start()方法时,Applet即进入活动状态,而一旦stop()方法被调用,即进入非活动状态。,public void play(URL url)播放由参数url指定的音频剪辑,如果该音频剪辑不存在,则不做任何事情。url参数指定的必须是一个绝对地址
17、public void showStatus(String msg)在浏览器的状态栏上显示由参数msg指定的文字信息,以便通知用户Applet的当前状态。通过第一节的例子,我们已经明白了Applet运行的方式和它的生命周期。下面我们通过实例来学习如何运用以上方法写出有趣的Applet。,例12.3 ShowImageApplet.javaimport java.applet.*;import java.awt.*;import.*;public class ShowImageApplet extends AppletString ImageName=null;String AudioName=
18、null;Image img=null;AudioClip audio=null;,public void init()ImageName=getParameter(image);img=getImage(getDocumentBase(),ImageName);AudioName=getParameter(audio);audio=getAudioClip(getDocumentBase(),AudioName);public void start()audio.play();,public void paint(Graphics g)g.drawImage(img,0,0,this);Sh
19、owImageApplet.html,图 12.4,这个例子展示了如何通过getImage()方法载入一个图片对象,并将它显示在浏览器中以及在启动Applet的时候播放一段音乐。首先,通过getParameter()方法从HTML代码中提取出参数,即Image和Audio文件的文件名。然后通过getImage()方法和getAudioClip()方法取得Image和Audio文件的对象。它们包括两个参数,getDocument()返回包含Applet的Web页所在的地址,第二个参数getJava.gif指定图片文件名。最后在start()方法中播放音乐。这样,Applet每次启动时都会伴随着一
20、段音乐。在paint()方法中调用drawImage()方法显示图片,运行时图片getJava.gif和windows start.wav两个文件必须和ShowImageApplet.html文件在同一目录下,其运行结果如图12.4所示。,运行结果如图12.4所示。值的注意的是,如果通过图片来源地址http:/,12.1.4 Applet标记以下为Applet标记的完整句法:archive=archiveList code=appletFile.class width=pixels height=pixels codebase=codebaseURLalt=alternateTextname=
21、appletInstanceNamealign=alignmentvspace=pixels hspace=pixels,.alternateHTML 这些标记的意义如下:archive=archiveList 这一可选属性描述了一个或多个含有将被预装的类和其他资源的archives。类的装载由带有给定codebase的AppletClassLoader的一个实例来完成。ArchiveList中的archives以逗号(,)分隔。,code=appletFile.class 这是一个必需的属性,它给定了含有已编译好的Applet子类的文件名。也可用package.appletFile.clas
22、s的格式来表示。注:这个文件与你要装入的HTML文件的基URL有关,它不能含有路径名。要改变Applet的基URL,可使用。width=pixels height=pixels 这些必需的属性给出了Applet显示区域的初始宽度和高度(以像素为单位),不包括Applet所产生的任何窗口或对话框。,codebase=codebaseURL 这一可选属性指定了Applet的基URL包含有Applet代码的目录。如果这一属性未指定,则采用文档的URL。alt=alternateText 这一可选属性指定了当浏览器能读取Applet标记,但不能 执行Java Applet时要显示的文本。name=ap
23、pletInstanceName 这个可选属性为Applet实例指定有关名称,从而使得在同一页面上的Applet可找到彼此(以及互相通信)。,align=alignment 这个可选属性指定了Applet的对齐方式。它的可取值与基本的HTML中IMG标记的相应属性相同,为left,right,top,texttop,middle,absmiddle,baseline,bottom和absbottom等。vspace=pixels hspace=pixels 这些可选属性指定了在Applet上下(vspace)及左右(hspace)的像素数目。其用法与IMG标记的vspace和hspace属性相
24、同。,这个标记提供了一种可带有由外部指定的数值的Applet,它对一个Java应用程序的作用与命令行参数相同。Applet用getParameter()方法来存取它们的属性,该方法将在稍后作更详细的讨论。不支持Java程序执行的浏览器将显示被包括在和标记之间的任何常规的HTML;而可支持Java技术的浏览器则忽略介于这两个标记之间的HTML代码。,12.1.5 从Applet中弹出窗口 有时候我们可能觉得浏览器的界面不利于布局管理,一个浮在顶端的窗口或对话框更能引人注目。实际上,确实可以从Applet程序中弹出一个如同应用程序一般的窗口来。这有时也有利于我们将现成的应用程序转成小应用程序,如果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第12章 Java 小应用程序Applet 12 应用程序 Applet
链接地址:https://www.31ppt.com/p-2368885.html