Java 26 / JEP 504:Applet API 正式退出 Java 历史舞台
一句话总结:JEP 504 将彻底移除 Applet API,这项曾经推动 Java 风靡全球的技术,将在 JDK 26 中正式告别 Java 平台。
一、基本信息卡片
| 项目 | 内容 |
|---|---|
| JEP 编号 | 504 |
| 标题 | Remove the Applet API |
| 类型 | Feature(功能变更) |
| 作用域 | SE(标准版) |
| 状态 | Closed / Delivered(已关闭/已交付) |
| 所属版本 | JDK 26 |
| 组件 | client-libs / java.awt |
| 负责人 | Philip Race |
| 创建时间 | 2024 年 12 月 4 日 |
| 关联 JEP | JEP 289(JDK 9 弃用 Applet API)、JEP 398(JDK 17 标记为待移除)、JEP 486(JDK 24 永久禁用安全管理器) |
二、背景与动机
2.1 Applet 的前世今生
1990 年代,Java Applet 是网页交互的一颗明星。它允许开发者在网页中嵌入 Java 程序,为当时以静态 HTML 为主的网页带来了动画、游戏和复杂的交互能力。可以说,Applet 是 Java 平台早期成功的关键推手之一。
然而,技术浪潮从不停歇。2015 年,Google Chrome 率先宣布停止支持 NPAPI——这是浏览器运行 Java 插件的核心技术基础。随后,其他主流浏览器也纷纷跟进,彻底关闭了 Applet 的运行通道。
2.2 移除历程:一场持续近十年的告别
Applet API 的退出并非突如其来的决定,而是一个渐进、谨慎的过程:
- 2017 年 · JDK 9(JEP 289):首次将 Applet API 和
appletviewer工具标记为弃用(Deprecated)。此时,浏览器厂商已在主动移除对 Applet 的支持。 - 2018 年 · JDK 11:正式移除
appletviewer工具。这个工具原本允许开发者在脱离浏览器的情况下测试 Applet。自此,JDK 中再无任何方式可以运行或测试 Applet。 - 2021 年 · JDK 17(JEP 398):将 Applet API 标记为“待移除”(Deprecated for Removal),向所有开发者发出最后通牒。
- 2025 年 · JDK 24(JEP 486):永久禁用安全管理器(Security Manager)。安全管理器是 Applet 沙箱机制的核心——它负责隔离不受信任的代码,防止恶意 Applet 危害用户系统。随着它的停用,Applet 失去了最后一块技术基石。
至此,Applet API 已经完全无法使用。继续保留一套既用不了也没有未来的 API,不仅增加 JDK 的维护负担,还可能对新开发者造成困惑。
三、核心变更详解
3.1 移除范围
JEP 504 将彻底移除以下 Java 平台 API 元素:
(1)整个 **java.applet** 包
该包中的所有类和接口将被完全删除:
| 类/接口 | 说明 |
|---|---|
java.applet.Applet |
Applet 基类 |
java.applet.AppletContext |
Applet 上下文接口 |
java.applet.AppletStub |
Applet 存根接口 |
java.applet.AudioClip |
音频剪辑接口 |
(2)其他相关类
java.beans.AppletInitializer:Applet 初始化器javax.swing.JApplet:Swing 版本的 Applet 类
(3)涉及引用的其他 API
移除 Applet API 后,其他 API 中引用上述类和接口的方法与字段也会被相应清理,包括:
java.beans.Beans中的相关方法javax.swing.RepaintManager中的相关引用
3.2 迁移建议
对于仍有应用在使用 Applet API 的情况,JEP 提供了以下迁移路径:
- UI 容器组件:如果
Applet类仅作为用户界面的容器组件使用,AWT API 提供了多种替代方案。 - 音频播放:如果
AudioClip类仅用于音频播放,JDK 25 中引入的javax.sound.SoundClip类可作为替代。
四、与历史版本的关联
JEP 504 与以下 JEP 和变更紧密相关:
| 关联项 | 版本 | 作用 |
|---|---|---|
| JEP 289: Deprecate the Applet API | JDK 9 | 首次弃用 Applet API |
| JEP 398: Deprecate the Applet API for Removal | JDK 17 | 标记为“待移除” |
| 移除 appletviewer 工具 | JDK 11 | 移除了 Applet 的测试工具 |
| JEP 486: Permanently Disable the Security Manager | JDK 24 | 禁用 Applet 依赖的沙箱机制 |
五、测试与兼容性
5.1 测试影响
所有依赖 Applet API 的测试都需要更新、禁用或移除。对于主 JDK 仓库中基于 jtreg 的测试,这项工作已基本完成。实际上,大多数相关测试只是借用了 Applet API 作为便利工具,而非专门测试该 API 本身。
5.2 兼容性风险评估
JEP 认为移除 Applet API 对用户应用的风险极小,理由如下:
- API 已长期无法使用:自 JDK 11 移除
appletviewer以来,开发者已无法使用 JDK 运行 Applet。 - 浏览器全面停止支持:主流浏览器早已不再支持 Java 插件。
- 充分的缓冲期:从首次弃用(2017 年)到最终移除(2026 年),开发者拥有近 9 年的时间进行迁移。
对于仍有 Applet API 依赖的应用,可以选择继续停留在旧版本 JDK 上,或迁移至替代方案。
5.3 社区反馈
在 JEP 504 的讨论过程中,也有社区成员表达了不同看法。有开发者指出,他开发的 IDE 插件(支持 IntelliJ IDEA、Eclipse、NetBeans 在 IDE 内嵌运行 Applet)自 2021 年以来下载量已超过 5 万次,此外他还有超过 20 个 Swing 应用同时提供 Applet 形态。他还提到,CheerpJ 和 TeaVM 等工具可以通过 WebAssembly 在浏览器中运行 Applet。
对此,JEP 负责人 Philip Race 回应称:JEP 已充分阐明移除理由;依赖 Applet 的开发者已获得 8 年以上的迁移通知;即便未来通过 WebAssembly 等技术在浏览器中使用 Java,也不会选择重新启用这套过时的 Applet API。
六、小结与展望
JEP 504 标志着一个时代的正式终结。Applet API 的移除不是一次仓促的“手术”,而是一场跨越近十年、循序渐进的技术告别。从 JDK 9 的首次弃用,到 JDK 11 移除 appletviewer,再到 JDK 17 标记“待移除”和 JDK 24 停用安全管理器,每一步都在为最终的移除铺路。
对于 Java 平台而言,移除长期无人维护且无法使用的 API,是保持平台健康演进的重要举措。它减少了代码库的维护成本,降低了新开发者的认知负担,也让 JDK 能够将精力集中在更有价值的功能上。
Applet API 完成了它的历史使命。对于老一辈 Java 开发者,它是一个时代的记忆;对于新一代开发者,它是一个理解技术生命周期管理的生动案例。Rest in peace, Applet API.
参考文献:
- JEP 原文:https://openjdk.org/jeps/504
- 关联 Issue:JDK-8345525
- 所属版本:JDK 26(已于 2026 年 3 月发布)



