Context:OpenJdK11とOpenJFx11を使用して単純なJavaFxアプリケーションを作成しようとしています
問題:実行しようとすると次のようなエラーが発生します
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)
直面している問題が明確であり、私がどこで間違っているのかについての入力を待っていることを願っています。 (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'
]
}
}
JavaFXの公式リポジトリから解決策を見つけました: https://github.com/javafxports/openjdk-jfx/issues/236
ただし、簡単な回避策がいくつかあります。たとえば、javafx.application.Applicationを拡張していないメインクラスを作成すると、そのメインクラスは実際のメインクラスでmain(String [])メソッドを呼び出すことができます(つまり、Javaランチャーでは、javafxライブラリを名前付きモジュールとして使用できる必要はありません)。
Intellij JavaでIDEAアーティファクトを作成しましたが、(gradleを使用せずに)機能します)。