Jdk 从 1.8 起支持 JavaFx,到 Jdk 11 不再包含 JavaFx,而是改为 OpenJFX,需要另行安装。
这篇是以前给同学整理的一份教程,尽量详细到每一小步,目标是在不降低 Java 版本的前提下通过安装 OpenJFX 解决 JavaFx 安装的问题。
教程是在 Win 10 ,Eclipse 2020-06, 用 OpenJFX 17 装的,下载文件更新到了18,步骤没影响
OpenJFX 18.0.2 官网下载链接如下:
https://gluonhq.com/products/javafx/
对于下载不方便的同学,我传了网盘:
版本 | 阿里云盘 | 百度网盘 |
Windows x64版本 | 「openjfx-18.0.2_windows-x64_bin-sdk」等文件https://www.aliyundrive.com/s/a7FF4U53iJX 提取码: 50mu | hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取 链接:https://pan.baidu.com/s/1otM8kIg9rM4tGSrVbqs9sQ 提取码:ah53 |
Windows x64版本 | 「openjfx-18.0.2_windows-x64_bin-sdk」等文件https://www.aliyundrive.com/s/a7FF4U53iJX 提取码: 50mu | hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取 链接:https://pan.baidu.com/s/1jmLNhn0NqH-ra_pvMVnxrg 提取码:2b11 |
MacOS | 「「openjfx-18.0.2_osx-aarch64_bin-sdk」等文件 https://www.aliyundrive.com/s/9PJ41xE6DAv 提取码: u9r6 | |
Linux | 「openjfx-18.0.2_linux-aarch64_bin-sdk」等文件 https://www.aliyundrive.com/s/Lfu9afjBjrR 提取码: gr14 | hi,这是我用百度网盘分享的内容~复制这段内容打开「百度网盘」APP即可获取 链接:https://pan.baidu.com/s/1otM8kIg9rM4tGSrVbqs9sQ 提取码:ah53 |
下载前请务必确认自己的电脑操作系统版本!!!
以最常见的Windows x64为例:
苹果系统版本查看方法:https://support.apple.com/zh-cn/HT201260
Linux系统版本查看方法:https://blog.csdn.net/szr4630/article/details/79613267
下载后将 javafx 的压缩包放在你自己原来的 java 的 jdk 的同一文件目录下,然后将其解压到当前文件夹中。放在同一文件夹下,便于后面的操作实现。解压好后是这个样子:
点进文件夹,点进lib文件夹,记住这个地址
我的是C:\ProgramFiles\Java\ openjfx-17.0.0.1_windows-x64_bin-sdk\javafx-sdk-17.0.0.1\lib
可以把你的路径开个txt复制下来,以免忘记(注意:每个人的JDK安装目录不同,要把地址改成自己的目录地址!!!)
这个目录其实可以自定义,但是这里一开始随便找了个地方自定义放后面会忘记的人很多,血泪教训,还是统一指定一个好找的地方。
或者保证你自己真的记住了!(比如把路径拷贝出来备份好)
打开Eclipse,打开你的workspace,右键项目名-Build Path -Add Libraries(中文:右击项目,找到建立路径,配置路径)
5.点击Add External JARs将所有javafx的jar包(以.jar结尾的文件)导进来,再apply and close。
#测试类代码
#文件名:HelloFX.java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch();
}
}
可以先试一下上面的代码能不能跑出来,有没有报错,没报错你就已经成功了。有一部分人的 eclipse 是不用配参数这一步直接就能用的,具体为什么我还没搞懂
1.点击运行按钮右边的下拉键(这个像绿色播放键一样的东西的右边的向下的黑色箭头),找到Run Configurations运行配置
2.点击Arguments那一栏,点击VM Arguments的Variables,点击Edit Variables
3.点击New新建一个VM Argument
前面运行报错的话,既然是缺少控制组件,那就命名为JavaFX.control, value也就是变量的值,它有特定的格式:
--module-path "C:\ProgramFiles\Java\javafx-sdk-17.0.0.1\lib" --add-modules javafx.controls,javafx.fxml
全都要写(包括空格),缺一不可。注意所有符号是英文输入法下的符号,双引号前要空一个空格,双引号后也要空一个空格,这个地址是你存放这个javafx的库包(lib)的绝对地址(就是之前的解压目录),第二个modules后面要空一个空格。如果不是这样存放的,记得修改下地址,不要照搬。最后点击ok。
又一个特别容易出错的坑,这里不要手动输入,一定要复制粘贴,所有的路径参数一定要用复制的!手动出错概率太高了,而且肉眼一般还看不出来。
Tips:如果 eclipse 里不好编辑就开个 Word 编辑完再贴进去。
4.点完ok后回到Select Variable,找到你刚刚命名的变量,再点击ok将这个变量插入VM Arguments 一栏里
5. 这时点击Run运行,最终运行出的效果
看到这个界面就成功啦
都是些小问题,但这些问题都是我实际见到过大家犯过的,也供大家自查
–module-path “你的路径” --add-modules javafx.controls,javafx.fxml
建议直接复制,手打是错误的源泉
……解压缩
删除错误的用户库,重新新建一个用户库并导入,只要 lib 文件夹下以.jar为后缀的文件
……如果你多于一个项目且随意命名,请认真检查、好好命名。检查你的 Run Configuration,保证你运行的是这次的 HelloFx 类
检查你的jdk版本,只有jdk1.8以下或者11以上的版本才需要另外安装OpenJFX,可能你并不需要安装 OpenJFX……
(普通java代码报错不算,指Eclipse界面都打不开直接闪退报错那种)
(虽然但是)重装一次电脑……从根本解决问题……
警告:这里的重装指操作系统重装,如果不能定位出错的源头的话,不要直接卸载 Eclipse
我知道比起重装,卸载可能听起来是个好主意,但这么做要谨慎。
我解决过一个 Eclipse 本身没问题,问题在路径太乱环境变量也被改没了的,但这位同学本人在来找我之前自己尝试了卸载又安装了几次在不同目录底下,于是问题一下子复杂了起来……
(在找人问问题之前先自力更生是好习惯,保留可以复现的问题环境会更好
这篇教程大量参考了下面的教程,没什么原创的东西,我就是整合了一下多截了一些图,特此致谢
版权声明:本文为CSDN博主「Charlais」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49552238/article/details/120478178
版权声明:本文为CSDN博主「comeon_IT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/comeon_IT/article/details/106310661
https://github.com/openjfx/samples/blob/master/HelloFX/CLI/hellofx/HelloFX.java
https://wiki.openjdk.java.net/display/OpenJFX
https://gluonhq.com/products/javafx/