Gradle OpenJFx11:错误 - 缺少 JavaFx 运行时组件

Posted

技术标签:

【中文标题】Gradle OpenJFx11:错误 - 缺少 JavaFx 运行时组件【英文标题】:Gradle OpenJFx11 : Error - JavaFx runtime components are missing 【发布时间】:2019-03-05 19:02:55 【问题描述】:

上下文:尝试使用 OpenJdK11 和 OpenJFx11 创建一个简单的 JavaFx 应用程序

问题:尝试执行时出现如下错误

Error: JavaFX runtime components are missing, and are required to run this application

我提到了 Link1 和 Link2 。我还提到了“JavaFx11 入门”-Link 正如入门中所建议的,当我尝试指定运行配置时,我会收到一条消息,如下所示

run' in 'build' cannot be applied to '(groovy.lang.Closure)' less... (Ctrl+F1) 

希望所面临的问题很清楚并等待关于我哪里出错的输入。 (使用 IntelliJ ide)

代码:

主要 -

public class Main extends Application 
@Override
public void start(Stage primaryStage) throws Exception 
    Parent root = FXMLLoader.load(getClass().getResource("/Sample.fxml"));
    StackPane stackPane = new StackPane(root);
    Scene scene = new Scene(stackPane);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.setScene(scene);
    primaryStage.show();



FXML-

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="Controller"
            prefHeight="400.0" prefWidth="600.0">

</AnchorPane>

Gradle-

plugins 
id 'java'


group 'testJavaFx'
version '1.0-SNAPSHOT'

sourceCompatibility = JavaVersion.VERSION_11

repositories 
    mavenCentral()


dependencies 
    compile 'org.openjfx:javafx-base:11:win'
    compile 'org.openjfx:javafx-controls:11:win'
    compile 'org.openjfx:javafx-fxml:11:win'
    compile 'org.openjfx:javafx-graphics:11:win'

    testCompile group: 'junit', name: 'junit', version: '4.12'


compileJava 
    doFirst 
        options.compilerArgs = [
                '--module-path', classpath.asPath,
                '--add-modules', 'javafx.controls'
        ]
    


run 
    doFirst 
        jvmArgs = [
                '--module-path', classpath.asPath,
                '--add-modules', 'javafx.controls'
        ]
    

【问题讨论】:

application插件添加到您的构建文件中,您还需要将javafx.fxml添加到—add-modules @JoséPereda 谢谢,但即使在将 javafx.fxml 添加到 --add-modules 后仍然出现同样的错误。我什至添加了基础和图形,但仍然是同样的错误。还有什么做错了吗?已编辑:添加了编译Java和运行的模块,仍然错误 你添加了应用插件吗?你能从终端./gradlew run运行吗? 我添加了应用程序插件,删除了构建中的运行无法应用于消息。但是执行时的错误仍然存​​在。如果我从 Intellij 的终端运行“gradlew run”,它会返回 gradlew 无法识别。如果我运行“gradle run”,它会说构建失败......任务执行失败:运行 gradlew 仅在您使用 Gradle 包装器时才有效。另外,您是否为application 插件定义了mainClassName 【参考方案1】:

我从JavaFX的官方仓库找到了一个解决方案:https://github.com/javafxports/openjdk-jfx/issues/236

虽然有一些简单的解决方法。例如,您可以有一个不扩展 javafx.application.Application 的主类,然后该主类可以在您的真正主类上调用 main(String[]) 方法(这样,Java 启动器不需要javafx 库可作为命名模块使用)。

我用 Intellij IDEA 创建了一个 java 工件,它可以工作(不使用 gradle)。

【讨论】:

谢谢。采用了主类调用扩展应用程序的类。但一旦项目准备就绪,最终将转移到 gradle run 任务。 在我的例子中,我采用模块化并将requires javafx.controls; 添加到我的module-info.java 中,然后它就可以正常工作了。

以上是关于Gradle OpenJFx11:错误 - 缺少 JavaFx 运行时组件的主要内容,如果未能解决你的问题,请参考以下文章

使用 gradle 6.3、OpenJDK 14 和 OpenJFX 14 部署 JavaFX 应用程序

带有模块的 Java 11 Gradle

使用 JDK 11+ 运行 JavaFX 应用程序

Scala + OpenJFX + OpenJDK

JavaFX应用程序无法启动(MacOS使用JDK11)

错误:缺少 JavaFX 运行时组件,需要在 Eclipse 中运行此应用程序