杰瑞科技汇

Java Applet方法有哪些?

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

Java Applet方法有哪些?-图1
(图片来源网络,侵删)

Applet 的生命周期方法

Applet 的生命周期由浏览器(或 Applet 查看器)控制,主要通过以下几个核心方法来管理,理解这些方法是掌握 Applet 的关键。

这些方法按以下顺序被调用:

  1. init()
  2. start()
  3. paint()
  4. stop()
  5. destroy()

public void init()

  • 调用时机: 当 Applet 被首次加载到浏览器中时调用。只调用一次
  • 作用: 进行一次性的初始化操作,相当于 Java 应用的 main 方法的初始化部分。
  • 常见用途:
    • 设置 Applet 的初始大小(setSize())。
    • 加载图像、声音等资源。
    • 初始化变量。
    • 添加 UI 组件(如按钮、文本框等)到 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 管理。

Java Applet方法有哪些?-图2
(图片来源网络,侵删)

与用户交互和图形绘制

  • 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 类型,需要你自己进行类型转换。

与 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 示例,它展示了上述生命周期方法和基本绘制。

Java Applet方法有哪些?-图3
(图片来源网络,侵删)

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 应用中实现类似功能的方式是:

  1. Java Web Start (JWS):

    • 曾经是 Applet 的官方继承者,它允许用户从 Web 服务器下载并启动一个完整的桌面 Java 应用程序。
    • JWS 也已过时,从 Java 11 开始被移除。
  2. JavaScript + HTML5 Canvas / WebGL:

    • 这是目前在浏览器中实现复杂图形和动画的标准方式,JavaScript 在浏览器中运行,无需任何插件,性能也非常好。
  3. WebAssembly (WASM):

    • 一种新的技术,允许其他语言(如 C/C++, Rust)编译成可以在 Web 浏览器中运行的二进制格式。
    • 如果需要将高性能的客户端逻辑(游戏引擎、科学计算)带到 Web,WASM 是当前的最佳选择。
  4. 服务器端渲染:

    对于复杂的交互,通常将逻辑放在服务器端(如使用 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 技术栈。

分享:
扫描分享到社交APP
上一篇
下一篇