当前位置:课程学习>>第九章 Applet程序设计>>文本学习>>知识点一


知识点一  Applet运行原理




一、概述

applet被称为Java小程序,是由“application”和“let”(小)两个单词合并而来的。applet可以应用在Web页面上,为静态的HTML网页带来了动态交互和生动显示等。正是由于applet的存在,Java语言和程序才得以借助互联网而快速发展,才能具有如此强烈的吸引力和感染力,应用得如此广泛。

applet是嵌入在Web页面上并通过Web调用来执行的,通过applet来实现用户与Web页面之间的交互。在applet中,可以集成图形、文字和声音等各类组件,和application相关的知识大多可以用在applet的编写中,同时applet也具有与application不同的特殊生命周期和使用方式。

applet是被设计用来在网页上运行的简单Java程序,但是在不访问网页和网络的情况下,也可以单独运行一个applet程序。

每个applet程序需要实现一个javax.swing.JApplet的派生类,所以在编写applet程序时,需要使用导入语句:

import javax.swing.*;

applet程序一般还需要awt类库的支持。这样,完整的导入语句可能为:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

java.applet.Applet是早期的applet程序所使用的基类,它不能与swing组件协调工作,JApplet类是Applet类的派生类,它继承了Applet类的所有方法,且能够支持swing组件。

二、Applet方法

与Java application不同,applet没有main方法作为程序的入口,当它显示在浏览器的Web页面时,在applet中定义的初始化、开始、停止和销毁等方法就会被调用。其中方法init、start、stop和destroy用以控制applet程序的生命周期。

表 9.1 java.applet.Applet类的生命周期方法

方法名

描述

void init()

在下载applet后,在第一次调用start方法前,浏览器会调用init方法。通常在该方法中将所使用的对象进行初始化。

void start()

浏览器会调用start方法通知applet正在处理。在调用start方法和init方法之间,可能会存在一段时间间隔。在start方法中实现applet所做的工作。

void stop()

调用stop方法通知applet已经停止处理,是在applet不在可视范围内或是destroy方法调用前被调用。例如,当用户滚动网页时,applet可能会出现在可视范围之外,此时应该停止applet中的执行动作,以免造成资源的浪费。

void destroy()

在applet销毁前,可以在此处释放掉所占用的资源。

以上四个方法构成了Applet程序的生命周期,可以通过它们来控制Applet方法的执行流程,如图所示。在applet的生命周期内,当用户将网页上下滚动或是在网页间进行跳转时,方法start和stop会多次被调用。所以要在这些方法中设计合理的逻辑。

1

图 9.1 Applet方法的执行流程

除了以上四个方法外,Applet类还提供了一些常用的方法。

表 9.2 java.applet.Applet类中常用的方法

方法名

描述

String getAppletInfo()

返回applet的作者名称、版权信息、版本号等信息,是一个字符串对象。

String getParameter(String parameterName)

如果applet需要接受参数,调用getParameterInfo方法可以获得指定名称的参数值,它们在HTML文档的<param>标记中定义(参见9.3节)。典型的应用是在init方法中使用。不要试图在构造方法中调用该方法,因为在applet的构造方法被调用时,这些参数是无效的。

String[][] getParameterInfo()

调用getParamenterInfo方法获得参数信息,该方法以二维字符串数组的形式返回applet中的参数信息,包括每个参数的名称、类型和描述。

URL getDocumentBase()

返回applet所嵌入的HTML文档的URL。

【例9.1】商品价格计算Applet程序

这个例子演示的是一个用于计算商品价格的applet。输入商品单价和商品数量后,点击计算按钮,就可以显示出商品价格。

//CalculatorApplet.java

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class CalculatorApplet extends JApplet implements ActionListener {

    JTextField unitPriceText = new JTextField();

    JTextField numberText = new JTextField();

    JTextField priceText = new JTextField();

    JButton calcBtn = new JButton("Calculate Price");

    //Initialize the applet

public void init() {

    priceText.setEditable(false);

    unitPriceText.setHorizontalAlignment(JTextField.RIGHT);

    numberText.setHorizontalAlignment(JTextField.RIGHT);

    priceText.setHorizontalAlignment(JTextField.RIGHT);

    JPanel p1 = new JPanel();

    p1.setLayout(new GridLayout(3, 2));

    p1.add(new Label("the unit price of product: "));

    p1.add(unitPriceText);

    p1.add(new Label("the number of product: "));

    p1.add(numberText);

    p1.add(new Label("the price of product: "));

    p1.add(priceText);

    p1.setBorder(new javax.swing.border.TitledBorder("Enter unit price and number"));

    JPanel p2 = new JPanel();

    p2.setLayout(new FlowLayout(FlowLayout.RIGHT));

    p2.add(calcBtn);

    getContentPane().add(p1, BorderLayout.CENTER);

    getContentPane().add(p2, BorderLayout.SOUTH);

    calcBtn.addActionListener(this);

  }

  public void actionPerformed(ActionEvent e) {

    float unitPrice = (Float.valueOf(unitPriceText.getText())).floatValue();

    float number = (Float.valueOf(numberText.getText())).floatValue();

    float price = unitPrice * number;

    priceText.setText(String.valueOf(price));

  }

}

运行结果;

2

在例子中使用了swing组件,该applet是扩展JApplet来实现的。

init方法负责初始化用户界面,在该方法内创建组件,包括标签、文本域和按钮。

例子中需要处理按钮的点击事件,这就要实现ActionListener监听器,方法actionPerformed负责从文本域中取出数值,通过简单的乘法运算获得结果,并显示在用户界面上。

 

进入知识点二学习