Gradle OpenJFx11: Ошибка - отсутствуют компоненты времени выполнения JavaFx - PullRequest
0 голосов
/ 30 сентября 2018

Контекст : Попытка создать простое приложение JavaFx с использованием OpenJdK11 и OpenJFx11

Проблема : При попытке выполнить

появляется сообщение об ошибке, как показано ниже
Error: JavaFX runtime components are missing, and are required to run this application

Я ссылался на Link1 & Link2 .Я также упомянул «Начало работы с JavaFx11» - Ссылка Как и предлагалось в начале работы, при попытке указать конфигурацию запуска я получаю сообщение, как показано

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

image

Надеюсь, возникшая проблема ясна, и ждите информации о том, где я ошибаюсь.(с использованием 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'
        ]
    }
}

1 Ответ

0 голосов
/ 03 октября 2018

Я нашел решение в официальном репозитории JavaFX: https://github.com/javafxports/openjdk-jfx/issues/236

Хотя есть несколько простых решений.Например, у вас может быть основной класс, который не расширяет javafx.application.Application, и этот основной класс может затем вызвать метод main (String []) для вашего реального основного класса (таким образом, средство запуска Java не требуетбиблиотеки javafx должны быть доступны как именованные модули).

Я создал артефакты java с Intellij IDEA, и он работает (без использования gradle).

...