起因
最近在学习 Paul Deitel 和 Harvey Deitel 编写的 Java 编程入门教材《Java: How to Program - Early Objects 11th Edition》
本书豆瓣页面链接
其中第 1 章第 1.10 节给出一个简易画板示例程序,是一个 JavaFX GUI 程序
其目录结构如下
按书上给的命令 javac *.java
编译时出现如下错误,编译失败
以上错误皆可统一归结为一个源头:编译器找不到 JavaFX 包
错误原因
本书使用的 Java 版本是 Java 8
而我使用的是 Java 17
然而从 Java 11 开始,JavaFX 包就不再被包含到 JDK 里
解决办法
第一步:下载 OpenJFX 包
OpenJFX 是 Oracle 将 JavaFX 从 JDK 中分离出来后,维护的一个开源版 JavaFX
首先来到 OpenJFX 主页,点击 Download
跳转到 Gluon 维护的 JavaFX 下载页面
向下滚动,选择要下载的版本。这里有一个问题:如果想要免费使用,你只能下载与当前最新 Java 版本号相同的 JavaFX 包,或者下个 Java 版本的预览包
例如,我使用的是 Java 17,但目前(2023年1月)最新的 Java 版本是 19,那么我没法免费使用 JavaFX 17,只能下载 JavaFX 19,网页会在一个支付页面和本页之间无限循环跳转
但这个问题无关紧要,因为 JavaFX 包向后兼容,Java 17 可以用 Java 19 的包
依次选好 JavaFX 版本、操作系统、指令集架构、类型一栏选 SDK,然后点击 Download
下载下来的是一个 .zip
格式压缩包,解压后打开,发现目录下只有一个文件夹
把这个文件夹移动到一个你喜欢的位置,记住这个位置
第二步:设置环境变量
如果想让 Java 编译器在编译时找到 JavaFX 包,那么需要在编译时通过编译选项 --module-path
指定好 JavaFX 包所在的路径。
但路径太长,编译时输入很麻烦。为了方便,我们给这个路径设置一个环境变量来指代它,到时直接用环境变量名即可。
打开“Windows设置”,点击左上角“系统”,点击左侧边栏最底下“关于”,找到右侧边栏“相关设置”,点击“高级系统设置”
弹出窗口,点击“环境变量”
弹出窗口,找到下方“系统变量”,点击“新建”
起一个变量名,最好只使用大写字母和下划线,方便你自己识别,我这里起名 JFX_PATH
然后点击“浏览目录”,弹出窗口,还记得上一步你把 JavaFX SDK 放在哪里吗?找到它,打开,选中 lib
文件夹,点击“确定”
然后“确定”,关闭环境变量窗口
环境变量不是即时生效的,需要注销或者重启,才可生效,注意:注销或重启之前一定要保存好电脑上正在进行的其他工作!
第三步:重新编译画板程序 & 运行
参考文章:https://openjfx.io/openjfx-docs/#install-javafx
使用 PowerShell
执行编译命令如下
javac --module-path $env:JFX_PATH --add-modules javafx.controls javafx.fxml *.java
如果没有报错,且目录下生成 .class
文件,执行运行命令如下
java --module-path $env:JFX_PATH --add-modules javafx.controls javafx.fxml Painter
使用命令行窗口(cmd)
执行编译命令如下
javac --module-path %JFX_PATH% --add-modules javafx.controls javafx.fxml *.java
如果没有报错,且目录下生成 .class
文件,执行运行命令如下
java --module-path %JFX_PATH% --add-modules javafx.controls javafx.fxml Painter
成功!
需要改进之处
我们发现这样输命令还是太长,太麻烦,可以通过给命令设置别名,或者在 PowerShell 的配置文件里设置 function 来缩短命令,省去不必要的打字环节
具体方法不在此赘述,可自行搜索文章来源:https://www.toymoban.com/news/detail-490364.html
(本文完)文章来源地址https://www.toymoban.com/news/detail-490364.html
到了这里,关于Java 17 中找不到 JavaFX 的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!