Location is required in JavaFX with gradle
gradle, javafx
Solution
Your FXML files are probably not packaged into your jar.
Try adding this to your build.gradle file:
sourceSets {
main {
resources {
srcDirs = ["src/main/java"]
includes = ["**/*.fxml"]
}
}
}
Problem
I'm getting java.lang.NullPointerException: Location is required. when I run my program after assembling using gradle with javafx plugin. If I run it from IntelliJ Idea, everything is all right. The Java source files and .fxml are locate in some package. build.gradle ``` apply plugin: 'java' apply plugin: 'application' apply plugin: 'idea' apply from: 'javafx.plugin' javafx { javaRuntime = 'C:\\Program Files\\Java\\jdk1.7.0_45' appID 'FXMLExample' appName 'fxml example application' mainClass 'local.hz.FXMLExample' } task "create-dirs" { sourceSets*.java.srcDirs*.each {it.mkdirs()} sourceSets*.resources.srcDirs*.each {it.mkdirs()} } ``` fxml_example.fxml ``` <?xml version="1.0" encoding="UTF-8"?> <?import java.net.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.*?> <GridPane fx:controller="local.hz.FXMLExampleController" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"> <padding><Insets top="25" right="25" bottom="10" left="25"/></padding> <gridLinesVisible>true</gridLinesVisible> <Text text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1" GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/> </GridPane> ``` FXMLExample.java ``` package local.hz; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class FXMLExample extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml")); Scene scene = new Scene(root,300,275); stage.setTitle("FXML WELCOME!!"); stage.setScene(scene); stage.show(); } public static void main(String[] arguments) { launch(arguments); } } ```