JavaFX项目基础应用
官网:JavaFX 国区官网:JavaFX中文官方网站
软件下载
1: javafx sdk下载 地址:JavaFX下载 | JavaFX中文官方网站 下载对应java的版本,一般分java11、java17长期版本,java8版本只有b测版本
2:source builder图形界面下载 地址:Scene Builder | JavaFX中文官方网站 下载对应java版本,分java8和java11+的版本
3:安装文档 get-start说明: Getting Started with JavaFX
IDEA与javaFX
IDEA下载fx插件(高版本自带)
setting -> plugins -> javaFX -> install

Languages & FreameWorks -> javaFX -> Path to SceneBuilder -> {SceneBuilder安装目录}

1:直接看官网的配置
教程地址: Getting Started with JavaFX
2:自己创建
新建Maven项目配置
File -> New -> Project -> Maven -> Create from archetype -> Add archetype
参数: groupId -> org.openjfx artifactId -> javafx-maven-archetypes version -> 0.0.6

选择刚刚创建的archetype进入下一步
新建项目属性 GroupId(com.demo) Artfactid(HelloFX) Version(1.0-SNAPSHOT)

下一步修改archetypeArtifactId为 javafx-archetype-fxml ,新增javafx为11.0.2 (下载的版本 java11版本javafx需要低于17)

如上配置,打开正常构建后悔自动添加javaFX配置与插件

新建一个Main应用程序,写入
public class Main {
public static void main(String[] args) {
Application.launch(App.class);
}
}启动Main程序

修改pom.xml打包为可执行jar包配置
添加如下2个插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<!-- MANIFEST.MF设置 -->
<manifest>
<!-- 依赖包路径-->
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 启动类-->
<mainClass>com.demo.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
执行启动jar包

打包注意点:
假如系统多个java版本,导致maven编译时jdk版本不一致时,修改maven编译运行版本 Setting -> Build,Execution,Deployment -> Build Tools -> Maven -> Run -> 修改为需要的版本
Graalvm打包JavaFX
添加依赖pom
(这里下载使用java11和graalvm版本20.3.5)
<properties>属性下添加
<graal-sdk.version>20.3.5</graal-sdk.version>
<dependencies>依赖下添加sdk
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graal-sdk.version}</version>
<scope>provided</scope>
</dependency>构建的属性<plugins>插件下添加native-image镜像插件 在根目录下新建bin文件
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>${graal-sdk.version}</version>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<skip>false</skip>
<imageName>HelloFX</imageName>
<mainClass>com.demo.Main</mainClass>
<buildArgs>
--force-fallback --native-image-info
</buildArgs>
<!-- 打包输出配置 需要根目录下新建bin文件-->
<outputDirectory>
bin/
</outputDirectory>
</configuration>
</plugin>项目复制到C盘
(和native-image指令同一个驱动盘)
项目封装exe
打开打包窗口

执行打包命令mvn clean package

打包完成示意图

到bin执行exe文件,完美执行

正常运行

graalvm新技术特点
把exe和jar包复制到其他windows系统也能正常执行,并且启动内存减少、启动速度提高
打包注意点:
graalvm_home 和 native-image 和 pom.xml 的 graal-sdk 版本一致
必须使用x64 Native Tools Command Prompt for VS 2019窗口执行native-image打包,不然会出现cl.exe找不到的错误
项目打包路径必须与graalvm同一个驱动盘(基本都在C盘),否则会出现 'other' has different root错误
===========graalvm官网 下载地址:GraalVM 快速启动地址:GraalVM
====================完整的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>HelloFX</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<graal-sdk.version>20.3.5</graal-sdk.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>15.0.1</version>
</dependency>
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graal-sdk.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.5</version>
<executions>
<execution>
<!-- Default configuration for running -->
<!-- Usage: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>com.demo.App</mainClass>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<!-- MANIFEST.MF设置 -->
<manifest>
<!-- 依赖包路径-->
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!-- 启动类-->
<mainClass>com.demo.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>${graal-sdk.version}</version>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<skip>false</skip>
<imageName>HelloFX</imageName>
<mainClass>com.demo.Main</mainClass>
<buildArgs>
--force-fallback --native-image-info
</buildArgs>
<!-- 打包输出 需要根目录下新建bin文件-->
<outputDirectory>
bin/
</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>