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>