2014-01-15 4 views
5

내가위치 Gradle을

java.lang.NullPointerException이납니다와 자바 FX 필요합니다 : 위치가 필요합니다.

javafx 플러그인을 사용하여 gradle을 사용하여 어셈블 링 한 후 내 프로그램을 실행할 때. IntelliJ Idea에서 실행하면 모든 것이 괜찮습니다. Java 소스 파일과 .fxml은 일부 패키지에서 찾습니다.

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

답변

-1

교체한다 :

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

:

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

이이 같은 경로입니다 –

+0

도움이되지 않습니다. –

16

는 귀하의 FXML 파일은 아마 당신의 용기에 포장되어 있지 않습니다. 당신의 build.gradle 파일이 추가

시도 :

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

이 답변은 정확합니다. 그 질문의 저자는 그것을 받아 들일 수 있습니다. –

+0

감사합니다. @KonradG. 나를 위해 일했다. –

+0

코드가있는 패키지에'* .fxml'을 넣으면'srcDirs = [ "path/to/your/code/root /"]' –

0

는 사실, Gradle을 가진 자원을로드하는 것은 당신의 IDE 자원 시스템을 사용 다를 수 있습니다.

그것은 클래스 로더를 사용하는 것이 좋습니다 :

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

Parent root = loader.load(myFxmlURL);