新手必看:OpenJFX Samples 的 HelloFX 源码逐行解读,彻底理解 JavaFX 启动流程

📅 发布时间:2026/8/20 17:33:10
新手必看:OpenJFX Samples 的 HelloFX 源码逐行解读,彻底理解 JavaFX 启动流程
新手必看OpenJFX Samples 的 HelloFX 源码逐行解读彻底理解 JavaFX 启动流程【免费下载链接】samplesJavaFX samples to run with different options and build tools项目地址: https://gitcode.com/gh_mirrors/samples5/samples如果你是刚接触 JavaFX 的新手想知道一个 JavaFX 程序如何从main方法一路运行到窗口弹出那么这篇 JavaFX 入门教程就是为你准备的。开源项目 samples5/samplesGitHub 加速计划下的 JavaFX 官方示例仓库收录了多套 HelloFX 源码示例可以用命令行、Maven、Gradle 以及各种 IDE 直接运行。接下来我们以其中最经典的HelloFX.java为例逐行解读 JavaFX 启动流程并给出最快跑通它的方法帮你彻底告别照抄代码却不知道发生了什么的困惑。一、HelloFX 是什么先认识这个 JavaFX 入门示例仓库整个 samples 项目只有一个核心目标用最简单的 HelloWorld 代码演示 JavaFX 应用在不同工具链下的运行方式。仓库里的每个示例都是同一个HelloFX类但配了不同的构建与运行方案运行方式示例路径特点纯命令行HelloFX/CLI/hellofx/HelloFX.java不依赖构建工具最纯粹MavenHelloFX/Maven/hellofx/依赖javafx-maven-pluginGradleHelloFX/Gradle/hellofx/依赖org.openjfx.javafxpluginIntelliJ / NetBeans / Eclipse / VSCodeIDE/目录下面向各 IDE 的现成工程此外示例还分为**模块化Modular与非模块化Non-modular**两套CommandLine/Modular与CommandLine/Non-modular分别对应 Java 9 模块系统开启前后的写法。所有示例都使用 JavaFX 21、要求 JDK 17 及以上这也是目前 JavaFX 入门最主流的环境组合。二、HelloFX 源码逐行解读JavaFX 启动流程的核心代码我们来看最经典的HelloFX/CLI/hellofx/HelloFX.java全文不过 22 行却完整覆盖了 JavaFX 启动流程的每个环节。下面是我加好注释的版本// 1. 导入 JavaFX 核心类 import javafx.application.Application; // Application所有 JavaFX 应用必须继承的主类 import javafx.scene.Scene; // Scene场景负责承载界面内容 import javafx.scene.control.Label; // Label显示文本的标签控件 import javafx.scene.layout.StackPane; // StackPane最简单的布局容器 import javafx.stage.Stage; // Stage舞台对应一个原生窗口 // 2. 继承 Application——这是 JavaFX 启动流程的入场券 public class HelloFX extends Application { // 3. 重写 start(Stage stage)JavaFX 启动流程的真正入口 Override public void start(Stage stage) { // 4. 读取系统属性拿到 Java 与 JavaFX 版本号 String javaVersion System.getProperty(java.version); String javafxVersion System.getProperty(javafx.version); // 5. 创建 Label 控件拼出欢迎文本 Label l new Label(Hello, JavaFX javafxVersion , running on Java javaVersion .); // 6. 创建 Scene把 Label 放进 StackPane并指定 640x480 的尺寸 Scene scene new Scene(new StackPane(l), 640, 480); // 7. 把 Scene 挂到 Stage窗口上 stage.setScene(scene); // 8. show()窗口真正显示画面到此出现 stage.show(); } // 9. main 方法程序入口调用 launch() 拉起整个 JavaFX 运行时 public static void main(String[] args) { launch(); } }JavaFX 启动流程拆解从 launch() 到窗口出现一共 5 步这段代码背后JavaFX 启动流程可以概括为以下 5 个步骤入口main方法调用launch()JavaFX 运行时开始初始化初始化图形系统、事件线程等实例化框架通过反射创建Application子类的实例并调用其init()本例未重写回调框架自动调用你重写的start(Stage stage)——注意这个Stage是框架替你创建好并传入的你不需要自己 new装配在start中创建Scene并绑定到Stage完成舞台 场景 控件的组装显示stage.show()让窗口可见随后 JavaFX 进入事件循环等待用户的鼠标、键盘交互。 新手最容易困惑的一点start不是main直接调用的而是由launch()背后的 JavaFX 启动流程在合适的时机回调。所以你完全可以把main看作点火按钮把start看作业务主场。三、模块化与非模块化JavaFX 项目的两种形态怎么选仓库特意提供了两套写法新手值得对照着看。模块化版本CommandLine/Modular/CLI/hellofx/src/module-info.java会多一个模块描述文件module hellofx { requires javafx.controls; // 声明依赖 JavaFX 控件模块 exports hellofx; // 导出包供外部访问 }非模块化版本CommandLine/Non-modular/CLI/hellofx/src/hellofx/HelloFX.java则没有module-info.java代码结构和前面逐行解读的完全一致区别只在于它常配一个Launcher.java作为启动类public class Launcher { public static void main(String[] args) { HelloFX.main(args); // 转调 HelloFX 的 main间接完成启动 } }为什么非模块化要多一层Launcher因为在某些环境下例如未开启模块系统、或主类被限制时直接运行继承Application的类会受限加一个普通类作为入口更稳妥。对新手来说想学习模块化写法就参考 Modular 目录想图省事就参考 Non-modular 目录功能表现完全一致。四、快速运行 HelloFX命令行、Maven、Gradle 三种方式看懂源码后最重要的就是亲手把它跑起来。这里给出三种最常用的 JavaFX 运行方式。4.1 命令行方式最原生态的编译运行步骤先下载 JavaFX SDK 并解压然后设置PATH_TO_FX指向其lib目录Linux/Mac 下示例cd HelloFX/CLI/hellofx export PATH_TO_FX/path/to/javafx-sdk/lib # 编译通过 --module-path 与 --add-modules 告知 javac 去哪找 JavaFX javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX.java # 运行 java --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX这里--module-path指定 JavaFX 库位置、--add-modules javafx.controls声明要用到的模块缺一不可这正是 JavaFX 启动流程对类路径的硬性要求。4.2 Maven 方式一键运行 JavaFX 应用Maven 工程HelloFX/Maven/hellofx/pom.xml只需声明javafx-controls依赖和javafx-maven-plugin插件并把主类配为HelloFX之后在工程目录执行一条命令即可mvn javafx:run在 VSCode 中也可以直接在 Maven 插件面板里找到javafx:run目标点击运行按钮启动效果如下4.3 Gradle 方式配置最简洁Gradle 工程HelloFX/Gradle/hellofx/build.gradle用插件声明 JavaFX 版本与模块配置比 Maven 更精简plugins { id application id org.openjfx.javafxplugin version 0.1.0 } javafx { version 21 modules [ javafx.controls ] } mainClassName HelloFX运行只需一条命令./gradlew run在 VSCode 的 Gradle 面板中展开Tasks application找到run任务点击即可想边看边练先克隆官方示例仓库git clone https://gitcode.com/gh_mirrors/samples5/samples然后按上面任一方式跑通你的第一个 JavaFX 应用。五、JavaFX 新手常见问题速查窗口标题栏里的版本号显示null说明运行环境没有正确加载 JavaFX 模块检查是否遗漏了--module-path/--add-modules或 Maven/Gradle 中是否声明了 JavaFX 依赖。运行报JavaFX runtime components are missing这是典型的非模块化主类直接启动问题改用Launcher类作为入口即可参考CommandLine/Non-modular目录。start和main到底谁先执行main先执行并调用launch()随后框架才回调startJavaFX 启动流程的先后顺序就是这样。界面代码都写了为什么没有窗口多半是忘了调用stage.show()这是窗口显示的最后一步。六、从 HelloFX 出发JavaFX 学习路线建议跑通 HelloFX 只是 JavaFX 入门的起点。接下来可以按这个顺序进阶学会布局与控件把StackPane换成VBox、BorderPane等容器组合更多控件引入 FXML参考CommandLine/Modular/Maven/hellofx/src/main/java/org/openjfx/MainApp.java用FXMLLoader加载scene.fxml让界面与逻辑分离这也是 JavaFX 的主流开发模式认识 Controller同目录下的FXMLController.java展示了FXML注解如何绑定按钮事件玩转构建与打包尝试mvn javafx:jlink生成定制 JRE把 JavaFX 应用打成免安装的可执行文件。至此从 HelloFX 源码逐行解读到 JavaFX 启动流程的 5 个步骤再到三种主流运行方式你已经掌握了 JavaFX 入门最核心的知识闭环。剩下的就是打开编辑器亲手写下属于你的第一个 JavaFX 应用了。【免费下载链接】samplesJavaFX samples to run with different options and build tools项目地址: https://gitcode.com/gh_mirrors/samples5/samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考