JavaFX17+JDK17使用记录——入门实例(编译、运行、jlink生成运行时镜像、jpackage打包)

简介

本篇用来记录根据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

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@胡海龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值