Java 17 中找不到 JavaFX 的解决方法

起因

最近在学习 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 来缩短命令,省去不必要的打字环节

具体方法不在此赘述,可自行搜索

(本文完)

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践深入掌握Java语言,并开启游戏开发之旅。资源包包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践持续学习新的技术和工具,不
jfxrt.jar 是JavaFX Runtime的一个JAR文件,它包含了JavaFX应用程序的运行时库。如果在使用JavaFX开发应用程序时遇到了"不到javafx:jar"的错误,可能是因为以下几个原因: 1. 版本不匹配:jfxrt.jar 的具体路径和命名可能会因为不同版本的JavaFX而有所不同。在JavaFX 1.x版本,通常可以在JDK安装目录的 jre/lib 目录下到 jfxrt.jar。但是在JavaFX 2.x及更高版本JavaFX已经被合并到了Java SDK,不再需要单独的 jfxrt.jar 文件。 2. 缺少依赖:如果使用了一些需要依赖JavaFX的库或工具,但是没有正确地配置jar文件或类路径。在这种情况下,需要确保jfxrt.jar的路径被正确地添加到你的项目的构建路径。 3. 环境变量配置错误:有时会遇到环境变量配置错误的情况,导致Java虚拟机无法正确地到jfxrt.jar文件。在这种情况下,可以检查和更新JAVA_HOME和PATH环境变量,确保它们指向正确的JDK安装目录。 解决这个问题的方法有几种: - 如果你使用的是JavaFX 2.x或更高版本,那么直接使用Java SDK即可,不需要单独的 jfxrt.jar 文件。检查你的开发环境和项目配置,确保JavaFX已经正确地集成到JDK。 - 如果你使用的是较旧版本的JavaFX,确保jfxrt.jar的路径被正确地添加到你的项目的构建路径。在IDE,可以在项目的构建路径或依赖项添加 jfxrt.jar。 - 检查和更新JAVA_HOME和PATH环境变量,确保它们指向正确的JDK安装目录。此外,还可以尝试重新安装JDK或JavaFX,确保它们被正确地安装和配置。 总之,"不到javafx:jar"的错误通常出现在JavaFX版本不匹配、依赖缺失或环境变量配置错误的情况下。根据具体的开发环境和项目配置,可以采取相应的方法解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值