TornadoFX 未解决的 JavaFx

Pat*_*ski 5 javafx intellij-idea kotlin tornadofx javafx-11

我想创建一个应该是桌面应用程序的新项目。为此,我选择了 Kotlin 语言和 TornadoFX 框架。我已经安装了TornadoFX插件并创建了一个新的 T tornadofx-gradle-project。Intellij 进行的基本设置成功,但我遇到了问题。当我想运行生成的项目时,它失败了。该项目无法解析 java fx。我已经通过网络挖掘并没有发现可以解决问题的任何内容。我在构建失败后收到的错误日志是:

错误日志

有没有人面临同样的问题?我怎样才能摆脱它?

我已经安装了 JDK 11 并将其设置为构建配置,但我仍然收到问题:

java.lang.UnsupportedClassVersionError: org/openjfx/gradle/JavaFXPlugin has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

是否有更改,我在中间错过了什么?

Jos*_*eda 7

看起来您正在使用 Java 11 或 12 运行 TornadoFX 项目。

TornadoFX插件看起来也适用于 Java 1.8,但不建议使用 Java 11+ 做什么。

从 Java 11 开始,JavaFX 不再是 JDK 的一部分。

您可以在此处阅读有关将 JavaFX 作为第三方依赖项添加到您的项目中的所有信息:https : //openjfx.io/openjfx-docs/,并且由于您使用的是 Gradle,因此本节将有所帮助:https : //openjfx.io /openjfx-docs/#gradle

我刚刚安装了 Tornado 插件,并使用 JDK 12.0.1 创建了一个项目。我还更新了gradle-wrapper.properties文件以使用 Gradle 5.3-bin,因为默认的 4.4 不适用于 Java 11+。

如果我运行它,我会收到相同的错误:

e: /.../src/main/kotlin/com/example/demo/app/Styles.kt: (3, 8): \
Unresolved reference: javafx
e: /.../src/main/kotlin/com/example/demo/app/Styles.kt: (18, 13): \
Cannot access class 'javafx.scene.text.FontWeight'. Check your module classpath for missing or conflicting dependencies
...
Run Code Online (Sandbox Code Playgroud)

基本上这些错误表明未找到 JavaFX。Tornado 插件没有预料到这一点。

解决方案

有一个简单的解决方案可以完成这项工作:将 JavaFX gradle 插件添加到构建中,以便处理 JavaFX 部分。

根据插件的存储库,您需要做的就是编辑 build.gradle 文件并添加:

buildscript {
    ext.kotlin_version = "1.2.60"
    ext.tornadofx_version = "1.7.17"
    ext.junit_version = "5.1.0"

    repositories {
        mavenLocal()
        mavenCentral()
        maven {
            setUrl("https://plugins.gradle.org/m2/")
        }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.junit.platform:junit-platform-gradle-plugin:1.1.0"
// Add JavaFX plugin:
        classpath 'org.openjfx:javafx-plugin:0.0.7'
    }
}

apply plugin: "kotlin"
apply plugin: "application"
apply plugin: "org.junit.platform.gradle.plugin"
// Apply JavaFX plugin:
apply plugin: 'org.openjfx.javafxplugin'

// Add the JavaFX version and required modules:
javafx {
    version = "12.0.1"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}
...

Run Code Online (Sandbox Code Playgroud)

就是这样,刷新您的项目,IDE 应该识别所有 JavaFX 类。

如果您修改默认值,MainView.kt例如:

class MainView : View("Hello TornadoFX \n with JavaFX " 
        + System.getProperty("javafx.version")) {
    override val root = hbox {
        label(title) {
            addClass(Styles.heading)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你应该能够运行它:

在此处输入图片说明