TornadoFX неразрешенный JavaFx - PullRequest
1 голос
/ 16 июня 2019

Я хотел создать новый проект, который должен быть настольным приложением. Для этого я выбрал язык 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

Есть ли изменение, что я что-то пропустил в середине?

1 Ответ

0 голосов
/ 17 июня 2019

Похоже, что вы запускаете проект TornadoFX с Java 11 или 12.

Также похоже, что плагин 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
...

В основном эти ошибки указывают на то, что 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' ]
}
...

И этообновите ваш проект, 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

...