Netbeans 9.0 with JavaFx 11 and JDK 11

kalix picture kalix · Sep 27, 2018 · Viewed 7.4k times · Source

I am trying to run JavaFX 11 on NetBeans 9 Since JDK 11 does not have JavaFX anymore I couldn't get NetBeans to run a JavaFX project, it says: "Failed to automatically set-up a JavaFX Platform."

I then downloaded the javafx11 from this website https://gluonhq.com/products/javafx/, after following the tutorial I was able to compile and run a JavaFX class normally through terminal. The only way I could add JavaFX is by using Maven, but I can't run the application even that it was built successfully.

    Error: JavaFX runtime components are missing, and are required to run this application
 Command execution failed.

Is there any other way to run JavaFX 11 with NetBeans? or maybe Eclipse?

Answer

Igor Smitran picture Igor Smitran · Nov 15, 2018

Maybe a late answer, but, it is possible to have javafx 11 maven project + NetBeans 9.

  1. Maven doesn't like extending Application in a main clas. You should use two classes:

Main.java:

public class Main {

    public static void main(String[] args) {
        MainApp.main(args);
    }
}

MainApp.java:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class MainApp extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        String a;
        a = new String("test");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
  1. Your pom.xml should look like this:

        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
    
            <groupId>YOUR GROUP ID</groupId>
            <artifactId>YOUR ARTIFACT ID</artifactId>
            <version>YOUR VERSION</version>
    
            <dependencies>
                <dependency>
                    <groupId>org.openjfx</groupId>
                    <artifactId>javafx-controls</artifactId>
                    <version>11</version>
                </dependency>
                <dependency>
                    <groupId>org.openjfx</groupId>
                    <artifactId>javafx-media</artifactId>
                    <version>11</version>
                </dependency>
                <dependency>
                    <groupId>org.openjfx</groupId>
                    <artifactId>javafx-graphics</artifactId>
                    <version>11</version>
                </dependency>
                <dependency>
                    <groupId>org.openjfx</groupId>
                    <artifactId>javafx-fxml</artifactId>
                    <version>11</version>
                </dependency>
            </dependencies>
    
            <build>
    
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.0</version>
                        <configuration>
                            <source>11</source>
                            <target>11</target>
    
                            <fork>true</fork>
                            <executable>PATH TO javac binary i.e. /usr/local/java/jdk-11.0.1/bin/javac</executable>
    
    
                            <compilerArgs>
                                <arg>-verbose</arg>
                                <arg>-Xlint:unchecked</arg>
                            </compilerArgs>
    
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>Main</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.2.1</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>java</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <mainClass>Main</mainClass>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <version>3.1.0</version>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>Main</mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                        <executions>
                            <execution>
                                <id>make-assembly</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            <name>YOUR ARTIFACT ID</name>
        </project>
    

This will work in netbeans without any issues. Basically, what you need to do is start new maven project and after you finish setting project just replace pom.xml.

This way your code will run from IDE, and will compile correctly so that you can run it from command line with java --jar. Also, you will be able to run NB debugger.