JavaFX17+JDK17使用记录

您所在的位置:网站首页 模块化编译 JavaFX17+JDK17使用记录

JavaFX17+JDK17使用记录

2024-07-12 20:36| 来源: 网络整理| 查看: 265

简介

本篇用来记录根据JavaFX官网入门示例的开发过程,这里只展示不使用maven或其他的构建工具的使用,先只展示使用JDK自带的工具和JavaFX的SDK和jmod使用,等使用熟悉了再使用构建工具。 本次实例等最终运行效果如下: 在这里插入图片描述

演示视频

JavaFX17+JDK17演示入门实例的编译、运行和通过jpackage打包为程序包

不使用构建工具来进行开发

在刚开始学习时我喜欢不使用maven这类构建工具来进行开发,喜欢使用原始的开发过程。等熟悉了原理和使用自带的构建工具后在使用方便我们开发的构建工具。

准备环境: JDK17:这里使用的时JDK17的开发环境进行开发的JavaFX SDK 17.0.2 LTS:JavaFX的SDK版本是17.0.2的版本JavaFX jmod 17.0.2 LTS:JavaFX的jmod版本也是17.0.2的版本 配置环境变量

在Mac安装完JDK17版本后它的目录是:/Users/huhailong/sdk/jdk-17.0.2.jdk/Contents/Home,我的默认JDK是1.8,而且目前大部分的项目我用的也是1.8开发的,只有自己的一些实验项目是使用最新的JDK17,但又不想每次输入这么长但路径,因此我们将上面三个都配置到环境变量中,每次使用时只需要引用环境变量就好。新版都mac配置是在用户目录下的.zshrc文件进行配置。在配置文件中增加以下内容: export JAVA17_HOME=/Users/huhailong/sdk/jdk-17.0.2.jdk/Contents/Home export JAVAFX_SDK=/Users/huhailong/sdk/javafx-sdk-17.0.2/lib export JAVAFX_JMOD=/Users/huhailong/sdk/javafx-jmods-17.0.2 使用时使用$JAVA17_HOME/bin/java这种方式就可以使用了,其他的类似。

不使用模块开发的例子

创建一个程序文件——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 { 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){ launch(); } }

上面的代码时使用官方的示例代码,运行时会在窗口中显示JavaFX的版本和Java的版本。

编译代码

$JAVA17_HOME/bin/javac --module-path $JAVAFX_SDK --add-modules javafx.controls HelloFX.java

–module-path:指定JavaFX的模块路径,这里是指定SDK的路径–add-modules:指定使用到的模块,这里使用到了javafx.controls,如果使用了fxml文件来进行界面的编写需要添加javafx.fxml 运行程序

经过上面的编译会生成HelloFX.class文件,接下来就使用java运行该程序。 $JAVA17_HOME/bin/java --module-path $JAVAFX_SDK --add-modules javafx.controls HelloFX

使用模块化开发

在JDK9的时候开始已经引入了模块化开发,这里不做过多的介绍。首先我们新建一个目录:hellofx-by-module 然后在里面创建src目录,在src目录下创建文件——module-info.java,然后在src目录下创建文件夹hellofx,在hellofx文件夹下创建文件HelloFX.java文件,它的代码和上面的实例代码相同,只不过多了package的定义,代码如下:

package hellofx; 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 { 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){ launch(); } }

module-info.java文件中的内容如下:

module hellofx { requires javafx.controls; exports hellofx; }

上面内容中moudle后面的hellofx是我们的模块名,这个后面会用到,里面的requires是用来引入第三方的jar包,exports用来将我们的hellofx包暴露出来。 整体的文件结构为:

hellofx-by-module src hellofx HelloFX.java module-info.java

我建成上面这样主要是为了模拟使用开发工具的结构,一般使用eclipse或者idea创建一个Java项目的目录结构和上面这样的是相似的。

编译代码

接下来是进行编译,编译的时候与上面的编译有一定的区别,编译命令如下(以下命令都在hellofx-by-module目录中执行): $JAVA17_HOME/bin/javac --module-path $JAVAFX_SDK -d mods/hellofx $(find src/ -name "*.java") 或者 $JAVA17_HOME/bin/javac --module-path $JAVAFX_JMOD -d mods/hellofx $(find src/ -name "*.java") 编译这里使用JavaFX的SDK和JMOD都可以,与上面编译的区别是我们没有使用–add-modules来指定模块,因为我们有了module-info.java文件,里面对模块的引用和暴露都进行了说明。-d 后面是我们将编译后的文件放到什么位置,这里指明了放到mods/hellofx目录中。

运行程序

$JAVA17_HOME/bin/java --module-path $JAVAFX_SDK:mods -m hellofx/hellofx.HelloFX

这里运行时需要指明用到的模块的路径,由于我们使用了模块,因此在运行的时候除了有JavaFX的模块路径还需要加上我们自己的模块目录,也就是刚刚编译好的目录,多个路径通过冒号分割。

使用jlink

对于模块化项目,jlink 可用于使用 JavaFX jmods 创建自定义运行时映像,也就是说通过jlink可以定制化创建一个可以在任何平台上运行的镜像文件。命令如下: $JAVA17_HOME/bin/jlink --module-path $JAVAFX_JMOD:mods --add-modules hellofx --output hellofx 注意这里是使用JavaFX的JMOD,不是SDK,运行完上面的代码会在项目目录中生成一个hellofx文件夹,里面生成了若干文件夹和文件,在bin里面可以看到有java的一个可执行文件,接下来我们通过这个它来运行我们的程序: hellofx/bin/java -m hellofx/hellofx.HelloFX 可以看到这次运行时没有依赖我们本机的任何环境依赖,因为已经通过jlink生成了一个定制化的可运行镜像,但注意,这个定制的jre是特定于平台的。比如我是用mac系统生成的,在ubuntu上是不能运行的。

使用jpackage命令打包

jpackage可以将程序打包为适用于与指定平台的可运行程序,例如mac系统下的app-image、dmg等,也可以打包为适合windows系统等exe或者mis。我这里使用的命令是: $JAVA17_HOME/bin/jpackage --type dmg -n hellofx -p $JAVAFX_JMOD:mods -m hellofx/hellofx.HelloFX 其中–type就是指定打包为什么类型的程序,-p 表示模块路径,-m 后面跟着是moduleName/className。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3