JDK 7u5 demos包使用指南:64位Windows下运行Swing与Applet示例

📅 发布时间:2026/10/15 17:29:18
JDK 7u5 demos包使用指南:64位Windows下运行Swing与Applet示例
简介这是一份面向Java开发者的64位Windows平台JDK 7u5开发工具包具体版本为Java SE 7 Update 5适合需要在64位系统上编译、调试和运行Java应用的开发者尤其是维护旧项目或学习Java 7新特性的技术人员。压缩包为zip格式整体约15.69MB解压后核心目录为jdk1.7.0_05内含JRE运行环境与JDK开发工具可满足从编码到运行测试的完整流程。该版本引入了switch字符串、try-with-resources、NIO.2文件系统API、钻石操作符、Fork/Join框架等特性对理解Java 7的语法演进与性能优化有参考价值。目前已有271人学习关注适合作为旧版Java环境搭建与特性验证的实用工具包。1. 那个躺在 JDK 安装目录里的 demos 包到底能拿来干什么很多人装完 JDK 就再也没打开过安装目录更不会注意到里面有个叫demos的文件夹。jdk-7u5-windows-x64-demos这个包说白了就是 JDK 7u5 这个特定更新版本、面向 64 位 Windows 平台单独分发的官方示例与演示程序集合。它不参与编译不影响java、javac运行所以绝大多数人装完就把它忘了。但如果你正在学 Swing 界面、想找一份能直接跑起来的 Applet 或 JavaFX 入门代码或者需要一份不依赖第三方库的最小可运行样例来验证环境这个包反而是最省事的选择。它适合三类人刚接触桌面端 Java 的开发者、需要离线示例做教学演示的人、以及想确认自己 64 位环境配置是否正确的人。下面按「它是什么、怎么跑起来、哪里会翻车」的顺序讲透。2. 先搞清楚 demos 包里装的是什么目录结构与组件归属2.1 为什么 JDK 7 之后 demos 要单独下载从 JDK 7 开始官方把示例代码从主安装包里剥离出来做成了独立的 demos 压缩包。原因很直接主安装包要控制体积而 demos 里塞了大量图片、音频、HTML 和编译好的 class 文件体积不小。到了 JDK 9 模块化之后这套 demos 的形态又变了所以jdk-7u5-windows-x64-demos实际上是一个特定历史阶段的产物——它对应的是 JDK 7 Update 5 这个版本64 位 Windows 专用。这里有个容易混淆的点demos 包的版本号必须和你的 JDK 版本匹配。你装的是 7u5就用 7u5 的 demos装的是 7u80用 7u5 的 demos 虽然大部分能跑但个别依赖内部 API 的示例可能报错。常见做法是版本对齐别混用。2.2 解压后你会看到的几个核心目录把压缩包解开典型结构如下不同更新版本略有差异但主体一致目录内容是否依赖额外组件demo/applets经典 Applet 示例含 HTML 宿主页需要浏览器支持或 appletviewerdemo/jfcSwing/Java 2D 示例如 SwingSet2、Notepad仅需 JDKdemo/jpdaJava 平台调试架构示例仅需 JDKdemo/scripting脚本引擎如 Rhino示例部分需脚本引擎 jarsample带源码的示例可自行编译仅需 JDKdemo/javafxJavaFX 示例若该版本包含需 JavaFX 运行时demo/jfc是含金量最高的部分。SwingSet2 这个演示几乎覆盖了 Swing 所有主流组件跑起来之后你能直接点着看每个控件的实际效果比看文档直观得多。sample目录里是带.java源码的可以自己改、自己编译适合拿来练手。2.3 64 位这个限定词影响什么标题里特意标了「64位」这不是废话。demos 包里有一部分是预编译好的.class或.jar还有少量.dll比如某些本地库示例。32 位的 demos 包在 64 位 JVM 上跑遇到调用本地库的示例会直接抛UnsatisfiedLinkError。反过来64 位包在 32 位 JVM 上同理。所以确认自己的java -version输出里带没带64-Bit是第一步。java -version # 期望输出类似 # java version 1.7.0_05 # Java(TM) SE Runtime Environment (build 1.7.0_05-b05) # Java HotSpot(TM) 64-Bit Server VM (build 23.1-b02, mixed mode)如果输出里没有64-Bit说明你当前PATH里指向的是 32 位 JVM需要调整环境变量或换用 64 位安装路径下的java.exe。这一步不做后面所有示例都可能出莫名其妙的问题。3. 把 demos 跑起来从解压到第一个 Swing 示例的完整命令3.1 解压与目录规划demos 包解压后不要随手扔在桌面。建议放一个路径里不含空格和中文的目录比如D:\jdk-demos\7u5。原因很简单部分示例的启动脚本或配置文件里写死了相对路径路径带空格时命令行解析容易出问题这是血泪经验。# 假设压缩包在 D:\downloads\jdk-7u5-windows-x64-demos.zip # 用系统自带解压或 7-Zip 解到指定目录 # 解压后确认目录结构 dir D:\jdk-demos\7u5 # 应能看到 demo、sample 等子目录解压完成后先别急着跑。用cd进入demo\jfc目录看看里面有哪些子文件夹。SwingSet2 通常是一个独立的子目录里面带SwingSet2.jar。3.2 运行 SwingSet2 的最小命令# 进入 SwingSet2 所在目录 cd D:\jdk-demos\7u5\demo\jfc\SwingSet2 # 直接用 java -jar 启动 java -jar SwingSet2.jar这条命令背后做的事JVM 读取 jar 包内的MANIFEST.MF找到Main-Class属性指定的入口类然后加载并执行。如果启动失败优先看报错信息里的类名和行号。常见失败原因是 jar 包损坏解压不完整或 JVM 版本不匹配。参数说明-jar后面必须跟完整的 jar 文件名不能只写目录。如果你想让窗口以特定尺寸启动SwingSet2 本身不一定支持命令行参数但你可以通过修改源码里的setSize调用来实现这属于进阶操作。3.3 编译并运行 sample 目录里的源码示例sample目录下的示例是给你改的。以其中一个最简单的为例# 进入某个示例源码目录 cd D:\jdk-demos\7u5\sample\demo\jfc\Notepad # 编译所有 java 文件到当前目录 javac -d . *.java # 运行主类类名以实际源码为准这里假设是 Notepad java Notepadjavac -d .的意思是编译当前目录下所有.java文件把生成的.class按包结构输出到当前目录。-d指定输出根目录.表示当前目录。如果你不加-dclass 文件会和源码混在一起包结构也会乱后续运行容易找不到类。运行时的类名要写全限定名。如果源码里有package com.example;那运行命令应该是java com.example.Notepad而不是java Notepad。这一点新手经常搞错报Could not find or load main class时先检查包名。3.4 Applet 示例怎么跑appletviewer 的用法demo/applets目录下是 Applet 示例每个示例通常配一个.html文件。JDK 7 自带了appletviewer工具可以脱离浏览器直接查看 Applet 效果。# 进入某个 applet 示例目录 cd D:\jdk-demos\7u5\demo\applets\Animator # 用 appletviewer 打开对应的 html appletviewer example1.htmlappletviewer会解析 HTML 里的applet标签加载对应的 class 并显示。注意现代浏览器早已移除对 Applet 的支持所以不要试图用 Chrome 或 Edge 打开这些 HTML只能用appletviewer。这也是为什么这套 demos 在今天看来更像「历史存档」——它的 Applet 部分基本只有考古和教学价值。4. 避坑与排查demos 跑不起来时先查这五条4.1 报 UnsatisfiedLinkError本地库位数不匹配现象运行某个示例时抛出java.lang.UnsatisfiedLinkError: no xxx in java.library.path。原因该示例依赖一个.dll本地库而你的 JVM 位数和 dll 位数不一致或者 dll 不在java.library.path包含的目录里。解决先确认java -version是 64 位再把对应的 dll 所在目录通过-Djava.library.path路径显式传给 JVM。例如java -Djava.library.pathD:\jdk-demos\7u5\demo\jfc\SomeDemo\lib -jar SomeDemo.jar4.2 报 Could not find or load main class包名或 classpath 问题现象java Notepad报找不到主类。原因源码里有 package 声明但运行时没写全限定名或者 class 文件不在当前目录的包结构下。解决打开源码看第一行package语句运行时用java 包名.类名。如果 class 文件在别的目录用-cp指定java -cp D:\jdk-demos\7u5\sample\demo\jfc\Notepad com.example.Notepad4.3 SwingSet2 启动后界面乱码或字体方块现象窗口能出来但中文显示成方块或者界面字体异常。原因JDK 7 默认字体配置在某些 Windows 语言环境下会出问题尤其是系统区域设置非中文时。解决启动时指定字体或调整系统区域设置。一个临时办法是加 JVM 参数强制使用某个字体java -Dswing.defaultlafjavax.swing.plaf.metal.MetalLookAndFeel -jar SwingSet2.jar如果只是中文乱码检查系统是否安装了对应中文字体并在源码里显式设置Font。4.4 解压后文件缺失或 jar 无法打开现象java -jar报Invalid or corrupt jarfile。原因压缩包下载不完整或解压工具对长路径支持不好导致部分文件没解出来。解决重新下载并校验文件大小换用 7-Zip 或系统自带解压解压路径尽量短。解压后对比目录里的文件数量是否和压缩包列表一致。4.5 在 JDK 8 及以上环境跑 7u5 demos 报错现象用 JDK 8 或更高版本运行 7u5 的 demos部分示例抛NoSuchMethodError或ClassNotFoundException。原因demos 里的预编译 class 是针对 JDK 7 的 API 编译的高版本 JDK 移除了某些内部 API如sun.*包下的类。解决要么用对应版本的 JDK 7 跑要么只跑sample目录下带源码的示例并自行重新编译。预编译的 jar 在高版本 JDK 上兼容性没有保证这是常见做法里反复强调的一点。5. 进阶用法把 demos 当成源码教材和调试靶场5.1 用 demos 源码练手从改一个参数开始sample目录的价值不在于「能跑」而在于「能改」。我一般会挑一个结构简单的示例比如 Notepad先通读一遍主类找到main方法然后做三件事改窗口标题、改初始尺寸、加一个按钮。改完重新javac编译看效果。这个过程能让你快速理解 Swing 的事件分发线程EDT和布局管理器是怎么协作的。// 示例在 main 方法里调整窗口初始尺寸 public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Notepad frame new Notepad(); frame.setSize(800, 600); // 原来是其他值改成 800x600 frame.setVisible(true); } }); }注意SwingUtilities.invokeLater这个写法Swing 组件必须在 EDT 上创建和更新直接在主线程里new窗口虽然有时能跑但属于玄学操作出问题时很难查。demos 里的正规示例都遵循这个模式照着抄就对了。5.2 用 jpda 示例理解调试架构demo/jpda目录下的示例展示了如何用 Java 平台调试架构JPDA连接和调试 JVM。如果你平时只用 IDE 的图形化调试器这套示例能帮你理解背后发生了什么断点是怎么设置的、变量值是怎么读出来的。跑通一个 jpda 示例比看十页文档都管用。5.3 验证环境是否正确的检查清单在投入时间改代码之前先用下面这个清单确认环境没问题检查项命令期望结果JVM 位数java -version输出含64-Bit编译器可用javac -version输出与 java 版本一致demos 路径无空格echo %CD%路径中无空格和中文jar 可读java -jar SwingSet2.jar窗口正常弹出源码可编译javac -d . *.java无报错生成 class 文件这张表里的每一项我都踩过坑。尤其是路径带空格这一条曾经让我在一个示例上耗了半小时最后发现是解压到了Program Files下面。后来我养成了一个习惯所有 JDK 相关的实验目录一律放在盘符根目录下的短路径里比如D:\jdk-lab。5.4 一个具体技巧用 demos 里的资源文件做界面原型demos 包里带了不少图片和音频资源分布在各个示例目录下。如果你在做一个 Swing 界面原型缺图标或提示音可以直接从这些资源里挑省得自己去找。用法很简单把图片复制到你的项目资源目录然后用getClass().getResource(/images/xxx.png)加载。注意资源路径要以/开头表示从 classpath 根目录开始找。// 从 classpath 加载图片资源 java.net.URL imgUrl getClass().getResource(/images/icon.png); if (imgUrl ! null) { javax.swing.ImageIcon icon new javax.swing.ImageIcon(imgUrl); button.setIcon(icon); }这段代码的关键点是getResource的路径规则以/开头是绝对路径从 classpath 根开始不以/开头是相对当前类所在包的路径。搞混了就会拿到null然后界面上一片空白查半天查不出原因。这套 demos 我前后翻过好几遍最大的体会是它不是一个「学完就能精通 Java」的教程而是一个「环境验证器 源码素材库」。别指望它教你编程思想但当你需要一份能立刻跑起来的参考实现时它比网上搜到的很多残缺代码靠谱得多。希望帮到你。本文还有配套的精品资源点击获取