2014-01-15 2 views
5

Ich erhalteLage in JavaFX erforderlich mit gradle

java.lang.NullPointerException: Standort erforderlich ist.

wenn ich mein Programm nach dem Zusammenbau mit Gradle mit Javafx-Plugin ausführen. Wenn ich es von IntelliJ Idea aus starte, ist alles in Ordnung. Die Java-Quelldateien und die .fxml befinden sich in einem Paket.

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); 
} 
} 

Antwort

-1

ersetzt Versuchen:

javaRuntime = 'C:\\Program Files\\Java\\jdk1.7.0_45' 

mit:

javaRuntime = 'C:/Program Files/Java/jdk1.7.0_45' 
+0

, die nicht –

+0

die gleichen Pfade Diese sind nicht helfen. –

16

sind Ihre FXML Dateien wahrscheinlich in Ihr Glas nicht verpackt.

versuchen, dies zu Ihrer build.gradle Datei hinzufügen:

sourceSets { 
    main { 
    resources { 
     srcDirs = ["src/main/java"] 
     includes = ["**/*.fxml"] 
    } 
    } 
} 
+2

Diese Antwort ist richtig. Autor der Frage könnte es akzeptieren. –

+0

Danke @KonradG. Arbeitete für mich. –

+0

Wenn Sie '* .fxml' unter die Pakete setzen, die Ihren Code haben, sollten Sie' srcDirs = ["path/to/your/code/root /"] '' schreiben –

0

Eigentlich sind eine Ressource mit Gradle Laden möglicherweise andere von Ihrem IDE-Ressource-System.

Es ist besser, den Classloader zu verwenden:

URL myFxmlURL = ClassLoader.getSystemResource("fxml_example.fxml"); 
FXMLLoader loader = new FXMLLoader(sampleUrl); 

Parent root = loader.load(myFxmlURL); 
Verwandte Themen