在01的世界里探索,
在烟火人间中生活。
![]()
哈喽,大家好,我是 「Yann」 。
很多人以为 Java 桌面端早就进骨灰盒了。
在这个满大街 Electron、到处是 AI 模型的年代,谁还看 Swing 和 AWT 这种“老古董”?
「但我建议你先别急着下结论。」
如果你紧盯 OpenJDK 的最新演进路线图,拆解最近几个版本到底提交了什么代码,你会发现一个违背直觉的真相:
「老兵不仅没死,官方甚至还在给它换装“钛合金骨架”。」
今天 Yann 给兄弟们脱水盘点一下,Java 桌面端生态近期迎来的几次底层大手术。看完你就知道,这波“逆生长”到底藏了多少技术红利。
Applet 彻底“拔管”
在即将发布的 JDK 26 中,Java 终于对 Applet 痛下杀手(JEP 504)。
不只是弃用警告,而是 「物理层面的彻底移除」 。连带着那个曾经让人头疼的“安全管理器(Security Manager)”机制也被永久剥离。
这意味着,那些远古时期的浏览器插件、沙箱安全机制,正式成为历史尘埃。如果你手里还在维护强依赖此类特性的老旧系统,要么抓紧重构,要么永远把环境锁死在 JDK 25 之前的版本。
底层架构的“暴力拆迁”
虽然表面上 Swing 的 API 还是那套熟悉的配方,但它的“渲染引擎”早就被大换血了。
「拥抱 Wayland:」 Linux 桌面生态正在全面抛弃 X11 转向 Wayland。官方不仅搞定了兼容层,目前正全力开发纯 Wayland 原生的 AWT Toolkit,未来甚至计划引入 「Vulkan」 渲染管线,流畅度直接起飞。
「图形管线现代化:」 macOS 平台已经全面切到 Apple Metal API,而 Windows 端的 D3D12 管线重构也已经在路上了。
「干掉祖传 JNI:」 以前调用系统底层库必须写痛苦且极易内存泄漏的 JNI。现在,底层源码正在大量引入 「FFM API (Project Panama)」 。用更安全、更高效的外部函数接口,逐步替换掉那些危险的底层操作。
等了二十多年,官方版的 「JDatePicker」 终于在核心库的开发沙箱中被提上日程。
以前搞日期选择,开发者只能去 GitHub 翻找那些断更了十年的第三方包。现在官方亲自下场,数据底层完美对接现代的 java.time.LocalDate ,自带多语言支持。
用法极度无脑,再也不用和 java.util.Date 搏斗了:
JDatePicker picker = new JDatePicker;
picker.addChangeListener(e -> {
LocalDate date = picker.getSelectedDate;
// 拿到的直接是 LocalDate,剩下的交给业务逻辑
});
把 Java 程序打成 exe 与绿色版桌面应用最恶心的就是环境配置。用户只想双击运行,没人愿意为了用你的软件去装个几百 MB 的 Java 环境。
现在的现代玩法是 jpackage 。为了让你直接上手,Yann 准备了一个「极简桌面端探针」源码,带你跑通全流程。
「Step 1:准备实战代码」 新建一个 Maven 项目,编写你的入口类 MainApp.java 。这段代码强制开启了字体抗锯齿和系统原生 UI 风格,告别远古马赛克:
package com.yann;
import javax.swing.*;
import java.awt.*;
publicclassMainApp{
publicstaticvoidmain(String[] args){
// 开启全局字体抗锯齿
System.setProperty("awt.useSystemAAFontSettings", "on");
System.setProperty("swing.aatext", "true");
// 切换为当前操作系统的原生 UI 风格
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName);
} catch (Exception e) {}
SwingUtilities.invokeLater( -> createAndShowGUI);
}
privatestaticvoidcreateAndShowGUI{
JFrame frame = new JFrame("Yann 的硬核探针 - 2026 Edition");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 350);
frame.setLocationRelativeTo;
JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
mainPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
JTextArea infoArea = new JTextArea("点击下方按钮获取系统状态...\n");
infoArea.setEditable(false);
infoArea.setFont(new Font("Consolas", Font.PLAIN, 14));
infoArea.setBackground(new Color(43, 43, 43));
infoArea.setForeground(new Color(169, 183, 198));
JButton actionBtn = new JButton(" 探测系统底层信息");
actionBtn.addActionListener(e -> {
// 【排版保命修改】弃用 """ 文本块,改用老式拼接,防 Markdown 解析器崩溃
String report = String.format(
"[探测成功]\n" +
"----------------------------------\n" +
"> 操作系统 : %s\n" +
"> 运行环境 : JDK %s\n" +
"> UI 引擎 : %s\n" +
"----------------------------------\n" +
"2026年了,Swing 依然能打!\n",
System.getProperty("os.name"),
System.getProperty("java.version"),
UIManager.getLookAndFeel.getName
);
infoArea.setText(report);
});mainPanel.add(new JScrollPane(infoArea), BorderLayout.CENTER);
mainPanel.add(actionBtn, BorderLayout.SOUTH);
frame.add(mainPanel);
frame.setVisible(true);
}
}
使用 Maven 打包,在项目根目录下执行 mvn clean package ,拿到你的 app.jar 。把 jar 包放入 input_dir 目录,准备好 assets/logo.ico 图标。
「Step 2:选择你的打包流派(核心信息差)」
jpackage 提供了两种截然不同的打包策略,直接决定了你的应用分发体验:
「A:生成免安装绿色版(--type app-image)」
如果你的目标是“U盘拷走直接用”或者“发给测试快速体验”,果断用这个。它会在输出目录生成一个完整的文件夹,里面包含你的应用启动程序和精简后的私有 JRE。
「不写注册表,不污染系统。」
打开 IDEA 终端(确保在项目根目录),执行:
❝ jpackage --type app-image --name "YannTools" --input input_dir --main-jar app.jar --main-class com.yann.MainApp --icon assets/logo.ico --dest out ❞
「B:生成标准安装包(--type exe)」
如果你要对外正式发布产品,必须用这个。它会把应用打包成一个正儿八经的 Windows 安装程序。支持选择安装路径、自动在桌面生成快捷方式、进开始菜单,甚至可以在控制面板正常卸载。
命令行加上特有的 Windows 体验参数:
❝ jpackage --type exe --name "YannTools" --input input_dir --main-jar app.jar --main-class com.yann.MainApp --icon assets/logo.ico --dest out --win-dir-chooser --win-shortcut --win-menu ❞
「避坑指南:」 生成 exe 安装包强依赖 Windows 平台下的 「WiX Toolset」 (推荐 3.11+ 版本)。没装它会直接报错!装完记得重启终端。
为什么我们还在坚持?
总有人问:既然 Web 这么发达,用 Java 写桌面端到底图什么?
其实看看业界标杆就明白了: 「IntelliJ IDEA」 。
这款公认全球最强的 IDE,底层就是基于 Swing 打造的。在需要极致性能、复杂多线程交互、跨平台强一致性的重度生产力工具面前,这套技术栈依然极其能打。
1996 年诞生,2026 年仍在进化。这不是什么技术情怀,而是 Java 生态那种恐怖的向前兼容能力。
, 我是 Yann ,一个致力于 用技术让全栈变简单的工程师 你的每一次支持,都是我继续探索“偷懒”技术的动力。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.