尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

HoRain云--Java Applet

HoRain云--Java Applet
📅 发布时间:2026/7/4 20:11:39

🎬 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,<applet>标签加载

开发调试

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

2017 之后

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

现在想"跑一下"老 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,@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)


六、现在怎么办

  • 新项目别写 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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关新闻

  • 彻底掌控你的Windows“此电脑“:MyComputerManager让顽固图标消失无踪
  • Obsidian插件汉化终极指南:3种模式快速实现英文插件中文化
  • Office批量打印软件推荐,告别低效操作

最新新闻

  • JupyterHub部署Docker性能优化:10个提升单主机部署效率的技巧
  • Unity3DRuntimeTransformGizmo核心原理:深入解析3D变换的数学实现
  • go-stock快速上手:AI赋能的本地化股票分析平台完整指南
  • Cosmos-Transfer1-DiffusionRenderer API参考:核心模块与函数详细文档
  • 为什么选择Genome?探索Swift中失败驱动映射的完整解决方案
  • 10个实用p5示例教程:让你的Python代码动起来

日新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存
  • AI项目操作手册编写规范与最佳实践

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号