Applet程序设计
本章目录
6.1 Applet基本概念
6.2 编写Applet程序
6.3 Applet多媒体设计
6.4 Applet的交互功能与通信功能
6.1 Applet基本概念
本章介绍Java语言的另一种程序,即Java小应用程序Applet。
一、什么是Applet?
Applet是Java语言与WWW相结合的产物,是一种被嵌入到Web页中,由Java兼容浏览器执行的小程序,可以生成具有动态效果和交互功能的Web页,其主要特点有:
◆ 绘图功能
◆ 动态效果
◆ 动画和声音
◆ 交互功能
◆ 窗口环境
◆ 网络交流能力
Applet是Java语言程序的一种特殊形式,从语法上看,Application的语法完全适用于Applet,包括语句、方法和图形界面设计技术等,二者之间的差异在于Applet是在浏览器环境
下运行的。Applet的应用是目前Java语言应用的重要内容,在Internet上可以浏览到数量惊人的Applet程序,其设计丰富多彩,千变万化,极大地丰富了WWW页面的内容。
二、Applet的运行环境和运行方式
Applet本身是一段Java程序,但它不能独立运行,需经过编译后成为字节码文件嵌入到HTML文本中,通过主页发布到Internet上。用户从网上访问主页打开HTML文本时,Applet被
用户浏览器执行起来。Applet自身无法以命令行方式启动,需要依赖浏览器为其提供图形界面,并且要求浏览器必须是Java兼容浏览器才行。
Java类库的java.applet包中定义了一个Applet类,Applet类被定义为面板Panel类的子类,是一个非独立的容器,必须被放到一个独立容器中才能执行。用户在编写Applet程序的
时候,程序的主类必须被声明为继承自Applet类,通常情况下或者是将主类声明为Applet类的直接子类,或者是将主类声明为Applet类的子类、Swing组件中的一个顶层容器
JApplet类的直接子类。
三、Applet的执行步骤和生命周期
当Java兼容浏览器发现Web页中有Applet时,将通过网络从Applet宿主机上下载Applet程序的主类,并引入其他必要的类,随后在Java兼容浏览器中生成Applet主类的一个对象实例
。同一Web页上的不同Applet主类,以及不同Web页上的Applet主类都会生成不同的对象实例,运行在同一浏览器上的各个Applet程序具有独立的行为。对于Applet而言,浏览器便
是Java运行时系统。
Applet的生命周期是指自Applet程序被下载直至它被系统回收所经历的历程。在这个历程中,有以下事件能够改变Applet的状态。
⒈下载Applet:可以产生一个Applet主类的实例,并对其进行初始化,启动Applet。
⒉离开或返回Applet所在的主页:离开网页或图标化浏览器窗口可使Applet停止运行,返回主页或恢复浏览器窗口可使Applet程序重新启动。
⒊退出浏览器:退出浏览器将使Applet程序停止自身执行,并进行善后处理。
四、Applet的安全机制
由于Applet是通过网络传递并且要经过下载才能被执行的程序,令人非常容易想到安全问题,即病毒传播、系统破坏和通过网络泄露用户端的有关信息等问题,如编写恶意代码通
过Applet程序盗取用户的保密信息并进行传播等。
Java语言提供了一个SecurityManager类用来防止发生上述类似事件,它几乎可以控制Java虚拟机的所有系统级调用,这一整套用来防止各种不安全事件的安全机制被称为“沙箱”
安全机制。对于所运行的Applet程序有以下约束:
⒈Applet只能通过网络通讯将数据写入其宿主机上的应用程序中,由应用程序完成宿主机上的文件写;
⒉Applet不能通过套接字与非宿主机进行网络通讯;
⒊Applet不能在运行它的主机上进行正常的文件操作;
⒋Applet不能调用运行主机上的任何程序。
6.2 编写Applet程序
一、Applet的主要行为
Java语言Application程序在执行时必须首先调用main()方法,进入main()方法之后即开始生成各种对象实例,并通过对象实例调用各个方法成员,待每一个执行过程结束之后,再
依次返回main()方法,这样main()方法成为Application程序的执行入口和出口。
Applet程序的执行过程与Application程序的执行过程有很大的不同,它不包含main()方法,也没有类似的明确的入口与出口。Applet程序也可以包含若干个类,其中也有一个主类
,其程序内容和执行过程则是通过主类中的以下几个方法实现的。
⒈初始化方法init():此方法是在Applet被浏览器下载时被执行的,在Applet的整个生命周期中只须执行一次。
⒉启动方法start():系统在调用完init()方法之后将自动调用start()方法,此后每当返回Applet所在的主页或是恢复浏览器窗口时系统都将调用一次start()方法。该方法中包含
Applet的主体内容。
⒊停止方法stop():每当离开Applet所在的主页或是图标化浏览器窗口时系统都将调用一次stop()方法。
⒋删除方法destroy():当浏览器将关闭时系统将调用destroy()方法杀死所有Applet线程、释放系统资源并进行善后处理,该方法在Applet的整个生命周期中只须执行一次,且是
整个生命周期中调用的最后一个方法。
⒌绘制方法paint(Graphics g):当Applet程序需要在界面上显示某些文字、图形、图像、色彩等等信息时,就需要调用此方法来完成绘制任务,有时为了使程序对于界面上的更新
能够快速响应,还需要多次调用此方法。
显然start()方法与stop()方法都可以被多次调用,并且两种方法是穿插调用的,每一次对stop()方法的调用都是在一次对start()方法的调用之后。
二、Applet编程
程序员在进行Applet程序编程的时候主要要完成三件事:第一是把Applet程序的主类声明为Applet类的直接子类或者是JApplet类的直接子类;第二是把要执行的相关代码通过重写
初始化方法、启动方法、停止方法、删除方法和绘制方法等方法写入Applet程序中;第三是如果需要的话还要再写出Applet程序的主类的其它方法成员及其它的非主类。
由于Applet程序的主类必须要被声明为Applet类或JApplet类的直接子类,这样,Applet程序的主类就不能再继承Applet类或JApplet类以外的类。
在Applet程序中,语句、语法、对象实例等等语言内容与编写Application程序是一样的,在其所包含的类中可以根据需要实现各种接口,也可以使用GUI界面设计技术。
通常情况下,用户主要是根据程序的实际情况重写几个主要的方法成员,大多数情况下仅需重写init()方法和start()方法,需要界面操作时重写paint()方法,stop()方法需要重
写的情形就少一些,而除非特殊情况,很少重写destroy()方法。
带有按钮的具有嵌套布局的Applet程序的简单例子。
例6.1
//Example 1 of Chapter 6
import java.awt.*;
import javax.swing.*;
public class AppletDemo1 extends JApplet
{
JPanel p;
JButton b1[],b2[];
public void init()
{
Container container = getContentPane();
container.setLayout(new BorderLayout());
p = new JPanel();
p.setLayout(new GridLayout( 3, 3, 5, 5 ));
b1 = new JButton[4];
b2 = new JButton[9];
for(int i = 0; i<4; i++)
{
b1[i] = new JButton(