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

3

我知道这个问题已经被问了多次……但是我似乎找不到解决方案。

以下内容取自官方指南示例:https://openjfx.io/openjfx-docs/#gradle 我继续添加到我的build.gradle

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

javafx {
    version = '13'
    modules = ['javafx.controls']
}

repositories {
    mavenCentral()
}

mainClassName = "MyImage"

jar {
    manifest {
        attributes "Main-Class": "$mainClassName"
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

通过运行gradle jar(或gradle build),应该会生成一个jar文件,其中包括它所构建的所有包,即整个javafx库。

然而,当它构建成功后,我继续运行:

java -jar build/libs/MyImage.jar

仍然会抛出错误:

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

我错过了什么?

(我使用JDK 11)

非常感谢。

1个回答

6
在Java 11中,Java启动器会检测你是否扩展了javafx.application.Application并检查模块是否存在。如果你使用的是普通的JAR文件,则会出现错误。
Error: JavaFX runtime components are missing, and are required to run this application

你有两个选择。一是设置你的应用程序使用Java模块系统,另一个选择是采用以下解决方法。这种方法可以避免Java启动器检查,并让应用程序正常运行。
public class MyImage {   // <=== note - does not extend Application

    public static class YourRealApplication extends Application {

        @Override
        public void start(Stage primaryStage) throws Exception {
            // whatever...
        }

    }

    public static void main(String[] args) {
        Application.launch(YourRealApplication.class);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接