Java Applet 基础
Java - Applet 基础 (已弃用技术)
Section titled “Java - Applet 基础 (已弃用技术)”重要提示:Java Applet 是已被严重弃用的技术。现代 Web 浏览器由于存在显著的安全漏洞以及更优越的 Web 技术的兴起,已经移除了 Applet 所需的 NPAPI 插件支持。**您不应使用 Applet 进行新的开发,并应尽可能避免使用它们。**本节内容仅为提供历史背景信息。
从历史上看,Applet 是一种小型 Java 程序,旨在嵌入到 HTML 网页中并在 Web 浏览器内部运行。在现代 JavaScript 框架普及之前,Applet 允许为网页添加交互式功能和复杂的计算。
主要历史特征:
Section titled “主要历史特征:”- 扩展
java.applet.Applet类(或者后来,用于 Swing 组件的javax.swing.JApplet)。 - 没有
main()方法;执行由浏览器/插件管理。 - 使用
<applet>标签(后来是<object>或<embed>)嵌入到 HTML 中。 - 在安全沙箱内运行,限制对本地系统资源(文件系统、网络连接等)的访问,除非明确授予权限(这很复杂且通常不安全)。
- 需要在浏览器中安装并启用 Java 虚拟机(JVM)插件。
Applet 为何过时:
Section titled “Applet 为何过时:”- 安全风险:浏览器插件模式是安全漏洞的主要来源。
- 糟糕的用户体验:需要安装插件,加载时间慢,在不同浏览器/平台上的行为不一致。
- 缺乏浏览器支持:所有主流浏览器(Chrome、Firefox、Edge、Safari)都已移除 NPAPI 插件支持。
- 更好的替代方案:现代 Web 开发依赖于 HTML5、CSS3、JavaScript(以及像 React、Angular、Vue 这样强大的框架)和 WebAssembly 来实现丰富的客户端功能。
Applet 的历史生命周期
Section titled “Applet 的历史生命周期”浏览器环境通过继承自 Applet 类(开发者可以覆盖这些方法)的特定方法来管理 Applet 的生命周期:
init():Applet 首次加载时调用一次。用于初始化任务(设置资源、解析参数)。start():在init()之后以及用户导航回 Applet 页面时调用。用于启动动画、线程或其他活动进程。stop():当用户离开页面时调用。用于暂停动画、停止线程并释放临时资源。destroy():当 Applet 被永久卸载时(例如,浏览器关闭)调用一次。用于资源的最终清理。paint(Graphics g):(继承自 AWTComponent)每当 Applet 的显示区域需要重绘时调用。开发者在此处使用Graphics对象放置绘图代码。
历史上的“Hello, World” Applet 示例
Section titled “历史上的“Hello, World” Applet 示例”警告:以下代码仅用于历史说明,在不使用过时软件进行大量工作的情况下,无法在现代浏览器中运行。
// HelloWorldApplet.java (历史示例 - 请勿使用)import java.applet.Applet;import java.awt.Graphics;
/** * @deprecated Applets are deprecated technology. */@Deprecatedpublic class HelloWorldApplet extends Applet {
// 浏览器调用此方法绘制 Applet 内容 @Override public void paint(Graphics g) { // 在位置 (25, 50) 绘制字符串 "Hello World" g.drawString("Hello World (Applet - Deprecated)", 25, 50); }}历史上的 HTML 嵌入方式
Section titled “历史上的 HTML 嵌入方式”Applet 使用 <applet> 等标签嵌入:
<!-- 历史 HTML 示例 - 请勿使用 --><html><head> <title>Deprecated Applet Example</title></head><body> <hr> <p>尝试加载已弃用的 Applet:</p> <applet code="HelloWorldApplet.class" width="320" height="120"> <!-- 如果浏览器不支持 Applet(或已禁用),则显示此文本 --> Your browser does not support Java Applets (or they are disabled). </applet> <hr></body></html>历史功能(参数、图像、音频)
Section titled “历史功能(参数、图像、音频)”Applet 具有以下机制:
- 参数:通过
<applet>标签内的<param>标签接收输入,使用getParameter(String name)方法获取。 - 图像:使用
getImage()和drawImage()加载和显示图像(GIF、JPEG)。如果从不同来源加载,需要适当的权限。 - 音频:使用
getAudioClip()和AudioClip接口(play()、loop()、stop())播放音频片段(.au, .wav)。
这些功能在 Applet 的上下文中也已过时。
Applet 的现代替代方案
Section titled “Applet 的现代替代方案”如果您需要在 Web 浏览器中实现丰富的客户端功能:
- JavaScript 框架/库:使用现代 JavaScript (ES6+) 以及像 React、Angular、Vue.js 或 Svelte 这样的框架来构建动态用户界面。
- WebAssembly (Wasm):将用 C++、C#、Rust(以及可能其他语言)编写的代码编译后在浏览器中以接近原生的速度运行,适用于性能密集型任务。
- 服务器端渲染 (SSR) / 框架:使用服务器端技术(例如带有 Spring Boot/Jakarta EE 的 Java、Node.js、Python/Django、Ruby/Rails)在服务器上生成 HTML,通常与 JavaScript 结合用于客户端增强。
如果您需要使用 Java 开发桌面应用程序:
- JavaFX:使用 Java 构建具有丰富用户界面的跨平台桌面应用程序的现代框架。
- Swing:用于 Java 桌面应用程序的较旧但仍广泛使用的框架。
- (Java Web Start - 也已弃用):曾是一种通过 Web 部署桌面应用程序的技术,但现在也已弃用并从现代 Java 版本中移除。
总之,虽然 Applet 在历史上具有重要意义,但现在已经过时且不安全。对于新的开发,请专注于现代 Web 技术或像 JavaFX 这样的 Java 桌面框架。