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>几个关键区别:
没有
main()方法,入口由浏览器 / appletviewer 控制继承
java.applet.Applet(AWT)或javax.swing.JApplet(Swing)编译成
.class/.jar,用户访问网页时从服务器下载到本地,由浏览器里的Java 插件(JRE) 跑受沙箱(Sandbox) 限制:默认不能读写本地文件、不能随便连外网(只能连来源主机),签名后可提权
二、生命周期(面试高频)
浏览器负责调度,五个核心方法:
用户访问含 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, |
开发调试 | JDK 自带 |
2017 之后 | Chrome 2015(F45)、Firefox 2016(F45) 砍掉 NPAPI → 浏览器里彻底跑不了;JDK 11 删掉 |
现在想"跑一下"老 Applet,只能:
JDK 8 老环境 + 老浏览器 + 老 JRE 插件(银行 legacy 系统还在这么苟)
或者走第三方方案如CheerpJ(把 JVM 转成 WASM 在浏览器跑)
四、为什么死得这么彻底
不是单一原因,是结构性的三连击:
1. 浏览器端:NPAPI 被集体废弃
2013 Chrome 默认禁 NPAPI → 2015 Chrome 45 彻底移除
2016 Firefox 45 终止所有 NPAPI
IE 后续由 Edge 接班,也不再支持
插件模型本身就被认为是不安全的"外来物",浏览器厂商一致想甩掉。
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 冷启动平均2.3s(JVM 初始化+类加载+AWT)+ 常驻>45MB
现代 JS 引擎毫秒级模块加载
HTML5 原生
<canvas>、WebGL、Web Workers、WebSocket 把 Applet 能干的事全覆盖了,还不用装 JRE、不用签权限
⚠️ 所以 Applet 不是"兼容性问题",是浏览器厂商 + 标准组织 + Oracle JDK 三方共同淘汰的技术范式。
五、时间线速记(面试能背)
年份 | 事件 |
|---|---|
1996 | JDK 1.0,Applet 随 Java 一起出生 |
2015 | Chrome 45 砍 NPAPI |
2016 | Firefox 45 砍 NPAPI |
2017 | JDK 9, |
2018 | JDK 11,删掉 |
2021 | JDK 17, |
2025 | JDK 24,Security Manager 永久禁用(JEP 486) |
2026.3 | JDK 26, |
六、现在怎么办
新项目别写 Applet——这条技术线已经断了
老系统迁移路径:
富交互网页 → HTML5 + JS / TypeScript + Canvas
要 Java 逻辑在浏览器跑 →CheerpJ(JVM→WASM)
桌面富客户端 →JavaFX(Swing 的继任,还在活)
跨语言高性能 → 还是上一轮聊的那套(Protobuf / gRPC / Web 后端)
如果你是在按"Java 已废弃特性"这条线刷,下一个可以聊Java Web Start (JNLP)(跟 Applet 同一拨死的,JDK 11 砍的)或者Security Manager 本身(JDK 24 刚埋掉)——都是面试里"为什么弃用 + 时间线"这套题的常客。挑一个?
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
