intellij-idea - TornadoFX Unresolved JavaFx

标签 intellij-idea javafx kotlin tornadofx javafx-11

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

error log

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

我已经安装了 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

enter image description here

有没有改变我在中间错过了什么?

最佳答案

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

它也看起来像 TornadoFX plugin适用于 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
...

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

解决方案

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

根据插件的repository ,您需要做的就是编辑 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' ]
}
...


就是这样,刷新您的项目,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)
        }
    }
}

你应该能够运行它:

enter image description here

关于intellij-idea - TornadoFX Unresolved JavaFx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621095/

相关文章:

scala - 在 Intellij 中运行简单的 Scala

intellij-idea - 我可以在 Intellij IDEA 运行配置中引用路径变量吗?

android - 造成原因:org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration $ ArtifactResolveException:

android - 理想的Android Studio Kotlin gitignore

scala - 为什么 Scala 在 IntelliJ 中的大型 Java/Scala 项目上编译失败?

java - 如何在 IntelliJ 中退后一步?

java - FXML 类未找到异常

java - 使用包含 WebView 的投影创建无边框窗口

Linux 上 JavaFX 无法解释的内存泄漏

java - 将通用 RecyclerView 适配器转换为 Kotlin