Gradle OpenJFx11 : Error - JavaFx runtime components are missing

10,223

I have found a solution from the official repository of JavaFX: https://github.com/javafxports/openjdk-jfx/issues/236

There are some easy workarounds though. For example, you can have a main class that is not extending javafx.application.Application, and that main class can then call the main(String[]) method on your real main class (that way, the Java launcher doesn't require the javafx libraries to be available as named modules).

I created a java artifacts with Intellij IDEA and it works (without using gradle).

Share:
10,223
iCoder
Author by

iCoder

I am a tech enthusiast with a new found love to learn Java. At present am learning & writing program in Java. In the past, I was a SAP Certified Functional consultant & worked on Implementations projects across the globe.

Updated on August 10, 2022

Comments

  • iCoder
    iCoder over 1 year

    Context: Trying to create a simple JavaFx application using OpenJdK11 & OpenJFx11

    Issue: I get an error as below when I try to execute

    Error: JavaFX runtime components are missing, and are required to run this application
    

    I referred to Link1 & Link2 . I also referred to 'Getting started with JavaFx11' - Link As suggested in the getting started when I try specifying the run configuration I get a message as shown

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

    Image

    Hope the issue faced is clear & await inputs as to where I am going wrong. (using IntelliJ ide)

    Code:

    Main -

    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'
            ]
        }
    }