HyperQing 2021-03-22

本文内容主要翻译自:https://openjfx.io/openjfx-docs/#IDE-Intellij 本文翻译的部分为原文非模块化项目的Gradle部分。 原生方法创建JavaFX项目见:https://www.yuque.com/go/doc/33340156

1. 创建Gradle项目

创建一个JAVA语言的Gradle项目。
使用Gradle创建JavaFX项目 - 图1
输入项目名称,例如:HelloFX,并指定项目路径。与此同时可以输入 groupId,例如org.openjfx,以及 artifactId 例如:hellofx。当项目打开后,添加一个包叫org.openjfx和一个空的MainApp类。
使用Gradle创建JavaFX项目 - 图2

2. 修改build文件

编辑build.gradle文件,用以下build文件内容进行替换,根据org.openjfx.MainApp类名来设置mainClassName。(具体需要按照你的实际版本来进行修改,例如javafx的版本,镜像的源等)

https://gitee.com/openjfx/samples/blob/master/IDE/IntelliJ/Non-Modular/Gradle/hellofx/build.gradle

  1. plugins {
  2. id 'application'
  3. id 'org.openjfx.javafxplugin' version '0.0.8'
  4. }
  5. repositories {
  6. mavenCentral()
  7. }
  8. dependencies {
  9. }
  10. javafx {
  11. version = "13"
  12. modules = [ 'javafx.controls', 'javafx.fxml' ]
  13. }
  14. mainClassName = 'org.openjfx.MainApp'

附:镜像可以使用以下代替。

repositories {
    jcenter()
}

与Maven相似的是,我们能够在build.gradle文件中声明我们需要的JavaFX模块。然而,对于Gradle,我们需要应用JavaFX gradle插件,如下所示。

javafx {
    version = "15.0.1"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

补充一个作者自己使用的示例build.gradle文件

plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.9'
}

group 'org.openjfx'
version '1.0-SNAPSHOT'

repositories {
    jcenter()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

test {
    useJUnitPlatform()
}

javafx {
    version = "16"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

mainClassName = 'org.openjfx.MainApp'

让IDE同步项目的Gradle配置后,IDE会自动下载所需的依赖。
使用Gradle创建JavaFX项目 - 图3
对于所有其他的Gradle依赖,他们的jar包都可以在本地的.local目录中找到。

:::tips :如果JAVA_HOME没有设置为JAVA 11或更新的版本,插件将会无法工作。为了避免这个问题,请确保Gradle JVM设置为正确的JDK。
使用Gradle创建JavaFX项目 - 图4 ::: **

3. 添加代码

MainApp类的基础上,添加这些内容到项目的的main类中。然后添加contrller控制器和FXML文件、css文件。IDE会自动识别JavaFX相关的类。
使用Gradle创建JavaFX项目 - 图5
由于官方教程给出的示例代码中,getResource("scene.fxml")会提示路径不存在,后来查明是需要在路径前面添加斜杠,故下面提供一个修正后可用MainApp类示例代码。

package org.openjfx;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/scene.fxml"));

        Scene scene = new Scene(root);
        scene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm());

        primaryStage.setTitle("JavaFX and Gradle");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

4. 运行项目

你可以打开Gradle窗口并点击hellofx -> Tasks -> build -> build来构建项目,然后通过hellofx -> Tasks -> application -> run来运行项目
使用Gradle创建JavaFX项目 - 图6
你也可以通过终端来启动项目:

gradlew run # windows
./gradlew run # Linux/Mac

作者的运行效果
image.png

作者启动遇到的问题排查

https://my.oschina.net/tridays/blog/2222909

参考文献: https://openjfx.io/openjfx-docs/#IDE-Intellij https://my.oschina.net/tridays/blog/2222909