Java Applet 技术已经过时,并且被现代浏览器完全弃用。 从 Java 9 开始,applet 类就被标记为过时,并在 Java 11 中被正式移除。现在学习 Applet 的方法主要是为了理解 Java 的历史和 AWT/Swing 的早期设计思想,而不是为了实际开发。

Applet 的生命周期方法
Applet 的生命周期由浏览器(或 Applet 查看器)控制,主要通过以下几个核心方法来管理,理解这些方法是掌握 Applet 的关键。
这些方法按以下顺序被调用:
init()start()paint()stop()destroy()
public void init()
- 调用时机: 当 Applet 被首次加载到浏览器中时调用。只调用一次。
- 作用: 进行一次性的初始化操作,相当于 Java 应用的
main方法的初始化部分。 - 常见用途:
- 设置 Applet 的初始大小(
setSize())。 - 加载图像、声音等资源。
- 初始化变量。
- 添加 UI 组件(如按钮、文本框等)到 Applet 的容器中。
- 设置 Applet 的初始大小(
public void start()
- 调用时机: 在
init()方法调用之后,以及当用户从其他页面返回到包含 Applet 的页面时调用。 - 作用: 启动或重新启动 Applet 的执行,它可能会被调用多次。
- 常见用途:
- 启动一个动画线程。
- 启动一个后台处理任务。
- 恢复在
stop()中暂停的操作。
public void paint(Graphics g)
- 调用时机:
- 当 Applet 首次显示在屏幕上时。
- 当 Applet 被部分或完全遮挡后,重新变得可见时。
- 当 Applet 的大小被改变时。
- 当你主动调用
repaint()方法时。
- 作用: 使用给定的
Graphics对象在 Applet 的界面上进行绘制,这是 Applet 视觉呈现的核心。 - 参数:
Graphics g是一个图形上下文对象,它提供了绘制各种图形(如线条、矩形、圆形、文本、图像)的方法,如drawString(),drawRect(),fillOval(),drawImage()等。
public void stop()
- 调用时机: 当用户离开包含 Applet 的页面时调用。
- 作用: 暂停 Applet 的执行,以节省系统资源,它可能会被调用多次。
- 常见用途:
- 停止动画线程。
- 暂停后台处理任务。
- 停止播放声音。
public void destroy()
- 调用时机: 当浏览器关闭,或者 Applet 所在的页面被彻底卸载时调用。只调用一次。
- 作用: 执行任何必要的清理操作,释放 Applet 占用的所有资源。
- 常见用途:
- 关闭所有打开的网络连接。
- 停止并销毁所有创建的线程。
- 释放其他系统资源。
生命周期流程图总结:
浏览器加载 Applet
|
V
init() // 一次性的初始化
|
V
start() // 开始执行(可能被多次调用)
|
V
+-----> paint() // 绘制界面(可能被多次调用)
| |
| V (用户离开页面)
| stop() // 暂停执行
| |
| V (用户返回页面)
| start() // 重新开始
| |
| V (浏览器关闭)
+-----> destroy() // 清理资源
其他重要的方法
除了生命周期方法,还有一些常用方法用于与用户交互和 Applet 管理。

与用户交互和图形绘制
public void update(Graphics g):- 在
paint()之前被调用,默认的update()方法会先清除整个 Applet 的背景,然后再调用paint()。 - 对于动画,你可以重写此方法以实现更高效的“双缓冲”技术,避免闪烁。
- 在
public void repaint():- 请求系统尽快调用
paint()方法,它不会立即重绘,而是将重绘请求排队,由 AWT 事件线程在合适的时机处理。 - 常带参数版本:
repaint(long x, int y, int width, int height),用于请求重绘一个特定的矩形区域,性能更优。
- 请求系统尽快调用
public void repaint(int delay):- 在指定的毫秒数后调用
paint(),常用于动画帧同步。
- 在指定的毫秒数后调用
Applet 信息
public String getAppletInfo():返回一个关于 Applet 的字符串,如作者、版本、版权信息等,通常用于 Applet 的信息对话框。
public String[][] getParameterInfo():返回一个二维字符串数组,描述 Applet 支持的参数信息(参数名、类型、描述),这有助于 HTML 页面开发者正确配置 Applet。
与 HTML 页面交互
public void getParameter(String name):- 获取 HTML
<applet>或<object>标签中通过<param>标签传递给 Applet 的参数值。 - 注意: 返回值是
String类型,需要你自己进行类型转换。
- 获取 HTML
与 Applet 上下文交互
Applet 可以通过 getAppletContext() 方法获取其“上下文”对象 (AppletContext),从而与浏览器环境交互。
public AppletContext getAppletContext():AppletContext的常用方法:showDocument(URL url): 在当前的浏览器窗口中显示指定的 URL。showDocument(URL url, String target): 在指定的目标框架(如_blank,_self)中显示 URL。getApplet(String name): 根据名称查找同一个 HTML 页面上的其他 Applet。getAudioClip(URL url): 获取指定 URL 的音频剪辑 (AudioClip)。getImage(URL url): 获取指定 URL 的图像 (Image)。
一个简单的 Applet 示例
下面是一个完整的、简单的 Applet 示例,它展示了上述生命周期方法和基本绘制。

HelloWorldApplet.java
import java.applet.Applet;
import java.awt.Graphics; // 导入 Graphics 类
// Applet 类是 java.applet 包的一部分,现在已经过时
public class HelloWorldApplet extends Applet {
// String 变量,用于存储要显示的消息
String message;
// 1. init() - 初始化方法,只调用一次
public void init() {
System.out.println("Applet: init() 方法被调用。");
// 从 HTML 参数中获取消息,如果没有则使用默认值
message = getParameter("message");
if (message == null) {
message = "Hello, World from an Applet!";
}
// 设置 Applet 的初始大小
this.setSize(300, 100);
}
// 2. start() - 启动方法,每次页面可见时调用
public void start() {
System.out.println("Applet: start() 方法被调用。");
}
// 3. paint() - 绘制方法,用于在屏幕上画东西
public void paint(Graphics g) {
System.out.println("Applet: paint() 方法被调用。");
// 使用 Graphics 对象的 drawString 方法来绘制文本
// 参数: (文本, x坐标, y坐标)
g.drawString(message, 20, 30);
}
// 4. stop() - 停止方法,每次页面不可见时调用
public void stop() {
System.out.println("Applet: stop() 方法被调用。");
}
// 5. destroy() - 销毁方法,Applet 被卸载时调用,只调用一次
public void destroy() {
System.out.println("Applet: destroy() 方法被调用。");
}
}
对应的 HTML 文件 (HelloWorld.html)
<html>
<head>My First Applet</title>
</head>
<body>
<h1>Here is my Applet:</h1>
<!--
<applet> 标签用于嵌入 Applet
code: 指定编译后的 .class 文件名
width: Applet 的宽度(像素)
height: Applet 的高度(像素)
-->
<applet code="HelloWorldApplet.class" width="300" height="100">
<!--
<param> 标签用于向 Applet 传递参数
name: 参数名
value: 参数值
-->
<param name="message" value="你好,来自 Applet 的世界!">
<!-- 如果浏览器不支持 Applet,这里的内容会显示 -->
Your browser does not support the applet tag.
</applet>
</body>
</html>
现代替代方案
由于 Applet 已被淘汰,现代 Web 应用中实现类似功能的方式是:
-
Java Web Start (JWS):
- 曾经是 Applet 的官方继承者,它允许用户从 Web 服务器下载并启动一个完整的桌面 Java 应用程序。
- JWS 也已过时,从 Java 11 开始被移除。
-
JavaScript + HTML5 Canvas / WebGL:
- 这是目前在浏览器中实现复杂图形和动画的标准方式,JavaScript 在浏览器中运行,无需任何插件,性能也非常好。
-
WebAssembly (WASM):
- 一种新的技术,允许其他语言(如 C/C++, Rust)编译成可以在 Web 浏览器中运行的二进制格式。
- 如果需要将高性能的客户端逻辑(游戏引擎、科学计算)带到 Web,WASM 是当前的最佳选择。
-
服务器端渲染:
对于复杂的交互,通常将逻辑放在服务器端(如使用 Java Spring Boot, Node.js 等),通过 API 与前端通信。
| 方法类别 | 核心方法 | 描述 |
|---|---|---|
| 生命周期 | init(), start(), paint(), stop(), destroy() |
Applet 从加载到销毁的完整流程控制。 |
| 图形绘制 | paint(Graphics g), repaint(), update(Graphics g) |
负责在 Applet 界面上进行视觉渲染。 |
| 信息获取 | getAppletInfo(), getParameterInfo(), getParameter(String name) |
获取 Applet 自身信息和从 HTML 传递的参数。 |
| 环境交互 | getAppletContext() |
获取与浏览器交互的能力,如打开新页面、加载资源等。 |
再次强调,这些方法属于历史技术,学习它们有助于理解 Java GUI 编程的演进,但在新项目中应选择现代的 Web 技术栈。
