第 9章 Java Applet
期末上机考试考试时间,6月 14日上午
9:20~ 10:20
考试题型:
1,判断 20× 1= 20分
2,单选 30× 2= 60分
3,填空 5× 2= 10分
4,编程 1× 10= 10分输入:
http://lhsys/exam
Java Applet
Java小应用程序( Java Applet) 也叫小应用程序,是使用 Java语言编写的一段代码,它嵌入到 HTML文档中,通过网络传输并运行在浏览器环境下。它的执行方式与一般应用程序不同,生命周期也较为复杂。本章将介绍 Applet程序的编写、运行及其主要方法。
Applet与 Application
都需要使用 Java语言编制程序
执行方式不同
Application是通过 Java解释器来执行的独立程序,
一般地使用命令行命令直接运行,从其 main()
方法开始
而 Applet在浏览器中运行的,除 Java程序外,还必须创建一个对应的 HTML文件,通过编写
HTML语言代码告诉浏览器载入哪个 Applet以及如何运行。运行时在浏览器中给出该 HTML
文件的 URL地址即可,Applet本身的执行过程也较 Application复杂
Applet的独特性
Applet的运行
必须创建一个对应的 HTML文件,在该文件中通过 <applet>标记指定要运行的 Applet程序名,
然后将该 HTML文件的 URL通知浏览器
Applet的安全性限定
Applet是可以通过网络传输和装载的程序,通过网络装载程序常常会暗藏某些危险
Java 1.0的安全机制
Java提供了一个 SecurityManager类,该类在
Java虚拟机( JVM) 上对几乎所有系统级调用进行监控。 SecurityManager类提供的安全模式称为 sandbox( 沙箱) 安全模式 ——
JVM提供一个 sandbox,允许 Applet在其中运行,一旦 Applet企图离开 sandbox,它的运行就会被禁止本机代码 远程代码
JVM
有用的资源(如文件等)
沙箱
Java 1.1的安全机制
JDK 1.1引入了,签名 applet”的概念,如果系统能够鉴别某个数字签名是可信任的,
则含有这个数字签名的 applet将与本机代码同等对待,可以使用本地的资源
在网络上传送时,applet和数字签名被组织成 JAR( Java文档)格式一起传送,而没有数字签名的 applet还与前一版本一样,只在沙箱中运行本机代码远程代码
JVM
有用的资源(如文件等)
沙箱
Java 2的安全机制
它允许用户 自己设定相关的安全级别 。对于应用程序,也采取了和 Applet一样的安全策略,程序员可以根据需要对本地代码或是远程代码进行设定,以保证程序更安全高效地运行
已经 不区分本机代码还是远程代码,所有的代码均需要通过安全检查。只当具有了访问许可的代码,才可以访问相关的资源安全策略 类下载器
JVM
有用的资源(如文件等)
沙箱本机或远程代码
Applet的安全机制
对系统安全性的限定尺度通常是在浏览器中设定的
浏览器都禁止 Applet程序的下述行为
运行过程中调用执行另一个程序
所有文件 I/O操作
调用本机( native) 方法
企图打开提供该 Applet的主机以外的某个套接口( socket)
Applet的安全机制
applet
浏览器SERVER
本地程序
file
SERVER
本机下载 applet的与 applet无关的本地方法
HelloWorld的 Applet
程序 9-1
编写 Applet
以下面的形式创建一个类:
import java.applet.*;
public class AppletName extends Applet {

}
必须是 public类型的,
因此,程序文件的文件名需要与类名保持一致必须是 java.applet.Applet
类的子类,因此要引入所需要的包
Applet类的继承关系
Java.lang.Object
Java.awt.Component
Java.awt.Button Java.awt.Container
Java.awt.TextComponent Java.awt.Panel
Java.applet.AppletJava.awt.TextArea Java.awt.Frame
Java.awt.Window
Applet也是 Panel类的子类,因此在缺省情况下,Applet
使用 FlowLayout布局管理器
Applet的主要方法构造方法 init() start()
完成 Applet的初始化操作均在 Applet被激活前执行,
因此不能用它们来实现
Applet的具体功能
Applet的显示
Applet本质上是个图形对象
可以在 Applet中使用 System.out.println()方法输出要显示的内容,但一般在图形环境下使用 Applet的 paint()方法绘制要显示的内容
当 Applet显示内容需要刷新时,paint()方法都会被调用
Applet的运行控制关系
程序 9-2 一个使用 paint()方法绘制字符串的
Applet程序
Java.applet.Applet
public void init() public void destroy()
public void start()
public void stop()
public void paint(Graphics g)
Applet的生命周期初始态(瞬态)
运行态停止态消亡态离开 Web页面:极小化或装入其他页面,调用
stop()方法重新装入或改变页面大小或返回 Web页面,调用
start()方法关闭浏览器,调用 stop()
,destroy()方法第一次装入,构造 Applet
类,调用 init()方法调用 start()方法
Applet的方法
init()方法
当 Applet对象被创建并初次装入支持 Java的浏览器(例如 AppletViewer) 时,init()方法会被调用
主要完成一些在 Applet构造方法所不能完成的工作,通常用于完成 Applet的数据初始化操作
start()方法
init()方法执行结束后,start()方法紧接着被调用
本方法是 Applet的主体,在其中可以执行一些任务或启动相关的线程来执行任务
当包含 Applet的浏览器窗口最小化之后再次恢复显示,
或者从浏览器的另一个窗口切换回包含 Applet的窗口时,
start()方法也会被调用
通常用于完成诸如启动动画或演奏音乐之类的操作
Applet的方法
stop()方法
离开 Applet所在页面时调用 stop()方法,例如包含 Applet
的浏览器窗口被最小化或其他窗口被激活时
离开相关的页面时,Applet从,活跃,变为,不活跃,
的状态,调用 stop()方法可以停止消耗系统资源。
Applet可利用 stop()方法完成诸如停止播放动画或音乐之类的操作
destroy()方法
当浏览器终止此 Applet时,调用 destroy()方法。浏览器关闭时也会自动调用,以清除 Applet所用的所有资源
Applet的运行
本身是一个 AWT组件,具有一般 AWT组件的图形绘制功能,也是一个容器,可以往其中添加其他的 AWT组件
三个与显示相关的方法
paint(),update()和 repaint(),java.awt.Component
类中声明三个方法的关系
AWT thread( waiting)
update():
清空区域调用 paint()
paint()
程序调用
repaint()
Exposure:
遮盖、调整大小、
最大最小化等三个显示相关的方法
paint( Graphics g )方法
首次被装载,以及每次窗口放大、缩小、刷新时调用,
由 AWT线程调用的,而不是由程序调用,当程序希望调用 paint方法时,用 repaint()方法,必须尽量缩短 paint()
方法和 update()方法的长度
update()方法
update()方法用于更新图形。它首先清除背景,然后设置前景,再调用 paint()方法。一般不要重写 update()方法
repaint()方法
repaint()方法主要用于重绘图形,通过调用 update()方法来实现图形重绘的。当组件外形发生变化时,系统自动调用 repaint()方法
appletviewer
appletviewer是一个可运行 Applet的 Java应用程序
用 appletviewer运行 Apple:
HelloWorld.html
$ appletviewer HelloWorld.html
<html>
<applet code = HelloWorld.class width=100 height=100>
</applet>
</html>
指明了要运行的 Applet是
HelloWorld.class
HTML与 <applet>标记
<applet>标记语法
<applet
code = appletFile.class
width = pixels height = pixels
[codebase = codebaseURL]
[alt = alternateText]
[name = appletInstanceName]
[align = alignment]
[vspace = pixels] [hspace = pixels]
>[<param name = appletAttribute1 value = value>]
[<param name = appletAttribute2 value = value>]

</applet>
必选项,指定需要运行的 Applet的文件名,该文件名也可使用
aPackage.appletFile.class的形式。注意文件名前面不能有路径名必选项,指定 Applet显示区域的初始宽度和高度(用像素数表示)可选项,为 Applet文件指定 URL可选项,指定一段可替换文本,当浏览器能理解 <applet>标记但不能运行 Applet程序时,这段文本可作为提示显示出来。
可选项,为 A t指定一个名字,
使得在同一浏览器窗口中运行的其他 Applet能够识别该 Applet并可与之通信可选项,指定 Applet的对齐方式,
可取值为 left,right,top,texttop、
middle,absmiddle,baseline、
bottom和 absbottom可选项,指定 Applet与周围文本的垂直间距和水平间距(用像素数表示)
可选项,为 Applet指定参数(包括参数的名称和数值)。在
Applet中可通过 getParameter()方法得到相应的参数。
各间距参数
Java applet 其它内容其它内容
vspace
hs
pa
ce
其它内容
vspace
其它内容
he
igh
t
widthhs
pa
ce
Applet参数的读取
通过 <applet>中的 <param>标记为 Applet指定参数
程序 9-3 使用 getParameter(String name)方法读取这个参数
<applet code = configureMe.class width = 100 height = 100 >
<param name = image value = duke.gif>
</applet>
getParameter()方法
getParameter()方法的参数为要读取的参数名称,如果没有为 getParameter()方法指定要读取的参数,则其返回值为 null
getParameter()方法的返回值类型为 String,
如果需要其他类型的参数,必须对其进行转换例如需要 int型参数时,语句如下表示:
int speed = Interger.parseInt(getParameter("speed"))
程序 9-4
程序 9-4,设有代码存储在 AppletPara.java中,
在 HTML页面中获得参数 p1的值,然后传送到 Applet中,由显示方法显示出 p1的内容
9-4.html
Applet与 URL
在 java.net包中定义了一个 URL类,该类用于描述网络上某一资源的地址
Applet类中有两个方法可以返回 URL对象
getDocumentBase()
返回当前 Applet所在的 HTML文件的 URL
getCodeBase()
返回当前 Applet所在目录的 URL。 除非在
<applet>标记中指定了 codebase,否则这个 URL
与 HTML文件的 URL是一致的在 Applet中显示图象
包 java.awt,java.awt.image和 java.applet中都提供了支持图象操作的类和方法
图象信息是封装在抽象类 Image中的。目前
Java核心类包支持 gif和 jpeg两种格式的图象
类 Image是一个抽象类,因此不能直接 new
出一个图象对象,需要采用特殊的方法载入或生成图象对象
Applet中图像显示
首先使用 Applet类的 getImage()方法装载一个 Image对象,然后使用 Graphics类的
drawImage()方法将该对象画到屏幕上
getImage()方法
public Image getImage(URL url,String name)
public Image getImage(URL url)
url是路径,name
是图像文件名
url直接包含了路径和文件名
Image art = getImage(getDocumentBase,"art.gif");
这条命令装载与 HTML处于同一服务器目录的图像文件 art.gif
drawImage()方法
使用 Graphics类的 drawImage()方法可以将
Image对象画到屏幕上
drawImage(Image img,int x,int y,ImageObserver observer)
img表示要画的 Image对象,x和 y表示 Image对象的位置,observer是绘图过程的监视器
observer的类型为 ImageObserver。 ImageObserver是
java.awt.image包中的一个接口,AWT中的
Component类实现了该接口。因此 Component类及其子类的实例都可以赋给 observer参数,但较常用的是使用当前 Applet,即用 this作为参数显示图像文件的
Applet
程序 9-5
在 Applet中播放声音
使用 Applet类的 play(),URL参数就是 HTML文件的 URL,因此可以通过 getDocumentBase()方法取得
public void play(URL url)
public void play(URL url,String name)
播放与 HTML文件处于同一服务器目录的 bark.au文件
play(getDocumentBase(),"bark.au")
Applet播放声音例程
程序 9-6在窗口中显示文本信息,Audio
Test”并播放声音文件 sound/cuckoo.au
另一种播放声音方法
声音对象装入内存,然后进行播放。需要使用 java.applet.AudioClip中的方法,事先需要取得一个 AudioClip声音对象
AudioClip声音对象
使用 java.applet.Applet类的 getAudioClip()方法可以获得 AudioClip声音对象
public AudioClip getAudioClip(URL url)
public AudioClip getAudioClip(URL url,String name)
AudioClip sound;
sound = getAudioClip(getDocumentBase(),"bark.au" )
另一种播放声音方法
播放 AudioClip声音对象时使用 AudioClip中的 play()方法,也可以使用 loop()方法循环播放声音对象
stop()方法停止声音对象的播放
sound.play();
sound.loop();
sound.stop()
程序 9-7
程序 9-7是一个循环播放声音对象的 Applet。
该 Applet在初始化时取得声音文件 cuckoo.au
( 该文件处于 HTML所在服务器目录的下一级子目录 sounds中)对应的 AudioClip对象,
并在 start()方法中开始播放
Applet的事件处理
Applet的事件处理方式与普通应用程序类似:
在 Applet中可以为各种事件注册监听程序,
然后通过监听程序对事件进行响应
程序 9-8是一个对鼠标事件进行响应的
Applet例子。每当用户按下鼠标,该程序就在鼠标被按下的位置显示字符串,Hello
World!”
Applet与普通应用程序的结合
Java程序通常是一个 Applet,或者是一个普通应用程序,这二者是截然不同的
可以编写出既是 Applet又是普通应用程序的
Java程序
程序 9-9 相应的 html文件 9-9html