appletviewer
appletviewer是Java开发工具包(JDK)中附带的一个命令行工具, 用于在不启动网页浏览器的情况下运行和调试Java Applet。它读取命令行给出的文档地址, 仅解析其中的 OBJECT、EMBED、APPLET 等与 Applet 启动相关的标签, 并把文档引用的每个 Applet 分别显示在独立窗口中。该工具自 JDK 9 起被标记为弃用, 并在 JDK 11 中被移除, 此后 JDK 不再提供运行 Applet 的手段。
定义
appletviewer 是随 JDK(Java 开发工具包)分发的一个命令行程序, 官方描述为“在网页浏览器之外运行 Applet”的工具。它的调用形式是先在命令名后写若干选项, 再给出一至多个地址, 由工具去连接这些地址指向的文档或资源[1]。
按照官方文档的说明, 该工具只服务于开发用途, 并非面向最终用户运行 Applet 的通用环境[2]。它属于 JDK 附带的“基本工具”之一, 与编译器、调试器等处于同一类别。
原理
工具的工作方式是解析而不是渲染。它从命令行取得文档地址后读取对应文档, 只识别与 Applet 启动直接相关的标记, 文档中其余与 Applet 无关的 HTML 会被忽略[3]。可用的入口标记有 OBJECT、EMBED 和 APPLET 三种; 若文档里一个这样的标记都没有引用 Applet, 工具执行后不会产生任何动作[4]。
识别到标记后, 文档引用的每一个 Applet 都会在属于自己的窗口中显示, 而不是像浏览器那样嵌入页面排版[5]。对于 OBJECT 标记, 工具会跳过 classID 和 codebase 这类原本指向 Java 插件的属性, 按默认存在插件的前提处理[3]。传入的地址需按 RFC2396 规定的转义方式编码, 只有编码过的地址能被接受, 而文件名部分则要事先解码[6]。
工具提供数个命令行选项: -debug 让查看器在 Java 调试器 jdb 中启动, 以便对文档中的 Applet 进行调试; -encoding 指定输入 HTML 文件的编码名称; -J 前缀用于把参数原样转交给运行本工具的 Java 解释器, 可用来调整执行环境或内存占用[7]。在同时存在两种虚拟机实现的 JDK 版本中, Applet 默认启动在 HotSpot Client VM 上, 也可用 -classic 选项改用 Classic VM[8]。
发展历程
该工具与 Applet 技术的兴衰同步。2015 年下半年起, 多家浏览器厂商已经移除或公布了移除标准插件支持的时间表, 而浏览器中运行 Applet 恰恰依赖插件, 因此 Applet 相关技术的使用场景迅速收缩。
2017 年发布的 JDK 9 通过 JEP 289 把 Applet API 标记为弃用, appletviewer 工具同时被弃用, 启动时会向标准错误流打印弃用警告。该版本中 Applet API 与工具仍然可用且受支持, 官方同时建议开发者转向 Java Web Start 或自包含应用等替代方案[9]。
2018 年 9 月发布的 JDK 11 正式移除了 appletviewer 启动器, 相关发布说明注明该工具已在 JDK 9 弃用并于本版本删除[10]。此后用 JDK 运行 Applet 的途径不复存在[11]。Applet API 本身在 JDK 17 被标记为待移除, 并在后续的 JEP 504 中被整体删除[11]。
应用
在浏览器插件仍是 Applet 主要运行载体的年代, 该工具承担的是开发期的本地验证工作: 开发者无需安装或启用浏览器插件, 即可把写好的 Applet 跑起来看效果[11]。因为不受浏览器插件版本与页面排版干扰, 它适合用来确认 Applet 的界面表现和参数传递是否符合预期[3]。
调试是它另一项明确用途, 配合 -debug 选项可把查看器置于 jdb 之下, 从而对文档中加载的 Applet 设置断点、单步跟踪[12]。由于工具只解析启动标记, 教学场景中也常用它把 HTML 里的 Applet 声明与页面其他内容分离开来观察。
局限
最根本的局限来自生命周期。工具自 JDK 11 起不再随 JDK 提供, 用该版本及之后版本的 JDK 已无法启动 Applet[10]。即便保留旧版 JDK, Applet 在浏览器中的主流使用场景也因插件机制退出而消失, 现代浏览器不再支持 Applet[11]。
功能层面, 它并非浏览器替代品。工具会忽略与 Applet 启动无关的 HTML, 因此不能用来检验页面整体布局或脚本交互效果[3]。当文档中没有 OBJECT、EMBED 或 APPLET 标记时它什么也不做, 也不对地址做额外容错, 只接受按 RFC2396 编码的地址[5]。此外官方定位它为开发专用工具, 其行为与浏览器内的实际运行环境并不等同[1]。
支撑 Applet 安全运行的沙箱基础同样在变化: 用于隔离不可信下载代码的安全管理器在 JDK 24 中被永久禁用, 这使得 Applet 模型失去了必要的支撑条件[11]。
参见
-
Java —— appletviewer 所属的开发平台与技术体系。
-
Java Applet —— 该工具所运行和调试的对象。
-
JDK —— 分发 appletviewer 的开发工具包。
-
Java Web Start —— 官方在 Applet 弃用后建议的替代部署技术。
-
浏览器插件 —— Applet 在网页中运行所依赖的机制。
参考资料
- appletviewer(1) — openjdk-11-jdk — Debian testing [引用日期2026-10-29]
- appletviewer - Java アプレットビューア [引用日期2026-10-29]
- appletviewer - Java Platform, Standard Editionツール・リファレンス [引用日期2026-10-29]
- JSMIG(PDF) [引用日期2026-10-29]
- appletviewer - Java アプレットビューア [引用日期2026-10-29]
- appletviewer-java-1.8.0-openj9(1) [引用日期2026-10-29]
- appletviewer-openjdk8(1) [引用日期2026-10-29]
- appletviewer - The Java Applet Viewer [引用日期2026-10-29]
- Java Platform, Standard Edition Tools Reference [引用日期2026-10-29]
- Release Note: Removal of appletviewer Launcher [引用日期2026-10-29]
- JEP 504: Remove the Applet API [引用日期2026-10-29]
- 4 コマンド・リファレンス [引用日期2026-10-29]