HoRain云--Java Applet

📅 2026/7/4 20:11:39 👁️ 阅读次数 📝 编程学习
HoRain云--Java Applet

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、Applet 是什么,跟普通 Java 程序的区别

二、生命周期(面试高频)

三、怎么跑(当年 vs 现在)

四、为什么死得这么彻底

五、时间线速记(面试能背)

六、现在怎么办


Java Applet 是1996 年 JDK 1.0 就跟 Java 一起出生的老伙计,定位是"嵌在网页里跑的 Java 小程序",当年用来给静态 HTML 加交互动画、图表、小游戏。但它已经被三方联手淘汰——浏览器砍 NPAPI、JDK 9 弃用、JDK 17 标记 removal、JDK 24 关掉支撑它的 Security Manager、JDK 26(2026 年 3 月)java.applet包彻底移除。现在属于考古范畴,但面试聊 Java 历史 / 维护 2000 年代老系统还可能撞上。


一、Applet 是什么,跟普通 Java 程序的区别

import java.applet.Applet; import java.awt.Graphics; public class HelloApplet extends Applet { @Override public void init() { System.out.println("初始化,只调一次"); } @Override public void paint(Graphics g) { g.drawString("Hello Applet", 20, 20); } }

HTML 里这么嵌(HTML5 已经不让用<applet>了,当年是<applet code="HelloApplet.class" width=300 height=200><object>):

<applet code="HelloApplet.class" width="300" height="200"> </applet>

几个关键区别:


二、生命周期(面试高频)

浏览器负责调度,五个核心方法:

用户访问含 Applet 的页面 → 类加载 → init() // 一次,初始化(读 param、建组件、加载资源) → start() // init 后调;用户切回页面也会再调(启动画/线程) → paint(Graphics g) // AWT 继承来的,绘制;重绘/ resize 都会再调 ← stop() // 用户离开页面时调,暂停动画/音乐,可反复 ← destroy() // 浏览器关闭时调一次,释放资源

记忆口诀:init → start → paint(反复) → stop → destroy

💡paint()不是 Applet 类自己的,是从java.awt.Component继承的,所以 Applet 本质是 AWT 组件,得靠 AWT 绘图模型。


三、怎么跑(当年 vs 现在)

时期

运行方式

1996–2015 黄金期

浏览器安装 JRE 插件,通过NPAPI​ 桥接 JVM,<applet>标签加载

开发调试

JDK 自带appletviewer工具,不用浏览器就能跑

2017 之后

Chrome 2015(F45)、Firefox 2016(F45) 砍掉 NPAPI → 浏览器里彻底跑不了;JDK 11 删掉appletviewer;JDK 17 起java.applet包标记@Deprecated(forRemoval=true)

现在想"跑一下"老 Applet,只能:


四、为什么死得这么彻底

不是单一原因,是结构性的三连击:

1. 浏览器端:NPAPI 被集体废弃

插件模型本身就被认为是不安全的"外来物",浏览器厂商一致想甩掉。

2. 安全端:沙箱守不住

2012–2016 年 CVE 公开80+ 个 Applet 沙箱逃逸漏洞(CVE-2013-0422、CVE-2016-0636 等),攻击者可绕过 Security Manager 执行本地代码。Oracle 自己都承认"沙箱已无法提供可信隔离"。JDK 24 干脆把 Security Manager永久禁用,Applet 最后一根支柱倒掉。

3. 性能 & 标准端:被 HTML5/JS/WASM 完爆

⚠️ 所以 Applet 不是"兼容性问题",是浏览器厂商 + 标准组织 + Oracle JDK 三方共同淘汰的技术范式。


五、时间线速记(面试能背)

年份

事件

1996

JDK 1.0,Applet 随 Java 一起出生

2015

Chrome 45 砍 NPAPI

2016

Firefox 45 砍 NPAPI

2017

JDK 9,@Deprecated(JEP 289)

2018

JDK 11,删掉appletviewer

2021

JDK 17,@Deprecated(forRemoval=true)(JEP 398)

2025

JDK 24,Security Manager 永久禁用(JEP 486)

2026.3

JDK 26,java.applet包彻底移除(JEP 504)


六、现在怎么办


如果你是在按"Java 已废弃特性"这条线刷,下一个可以聊Java Web Start (JNLP)(跟 Applet 同一拨死的,JDK 11 砍的)或者Security Manager 本身(JDK 24 刚埋掉)——都是面试里"为什么弃用 + 时间线"这套题的常客。挑一个?

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙