2017-12-24 24 views
0

씬 빌더 및 fxml에 대한 작업 경험이 거의 없으며 새 프로젝트 작업을 시작할 때 fxml 파일 위치 설정 문제가 발생했습니다. NetBeans 8.2도 사용하고 있습니다.Java FX FXML NullPointerException

package javafxapplication; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

/** 
* 
* @author Ben 
*/ 
public class JavaFXApplication extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocumentLoad.fxml")); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

내 FXML :

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Label?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/9.0.1" fx:controller="javafxapplication.FXMLDocumentControllerTest"> 
    <children> 
     <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" /> 
    </children> 
</AnchorPane> 

마지막으로, 내 컨트롤러 :

package javafxapplication; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 

/** 
* 
* @author Ben 
*/ 
public class FXMLDocumentControllerTest implements Initializable { 

    @FXML 
    private Label label; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
    }  

} 

오류 :

ant -f C:\\Users\\Ben\\Do7cuments\\NetBeansProjects\\JavaFXApplication -Djavac.includes=javafxapplication/JavaFXApplication.java -Dnb.internal.action.name=run.single -Drun.class=javafxapplication.JavaFXApplication run-single 
init: 
Deleting: C:\Users\Ben\Do7cuments\NetBeansProjects\JavaFXApplication\build\built-jar.properties 
deps-jar: 
Updating property file: C:\Users\Ben\Do7cuments\NetBeansProjects\JavaFXApplication\build\built-jar.properties 
Compiling 1 source file to C:\Users\Ben\Do7cuments\NetBeansProjects\JavaFXApplication\build\classes 
compile-single: 
run-single: 
Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at javafxapplication.JavaFXApplication.start(JavaFXApplication.java:22) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    ... 1 more 
Exception running application javafxapplication.JavaFXApplication 
C:\Users\Ben\Do7cuments\NetBeansProjects\JavaFXApplication\nbproject\build-impl.xml:1052: The following error occurred while executing this line: 
C:\Users\Ben\Do7cuments\NetBeansProjects\JavaFXApplication\nbproject\build-impl.xml:806: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
여기

내 응용 프로그램 클래스입니다 내 수업의

모두 같은 폴더에있는 "/ SRC/javafxapplication" 나는의 getResource에 "/FXMLDocumentLoad.fxml"와 "/javafxapplication/FXMLDocumentLoad.fxml"를 변경 시도했다, 그러나 어느 쪽도

감사했다!

+0

프로젝트 유형에 따라 fxml 파일과 같은 리소스를 별도의 리소스 폴더 구조에 배치해야합니다. – fabian

답변

0

그것은 넷빈즈 8.2 버그로 판명합니다. 해결 방법은 shift-F6 (pc)을 사용하는 대신 실행 버튼을 사용하여 파일을 실행하는 것입니다.

0

getClass()에서 null 값을 가져 오면 안됩니다. getResource ("file.fxml"); 이는 Class.getResource를 사용하면 클래스와 관련된 자원을 조회하기 때문입니다. 모든 리소스를 동일한 디렉터리에 & 패키지에 배치 했으므로 해당 패키지의 클래스를 사용해야합니다.

나는 당신이 의미

FXMLLoader.load(getClass().getResource("FXMLDocumentLoad.fxml")); 

사용주의 - 파일을로드하는 클래스 로더를 사용하지만, 클래스 로더는 당신이에서 검색 클래스에 대해 알고하지 않습니다; 그래서 - 기본 패키지에 FXMLDocumentLoad.fxml을 찾으려고합니다.

당신은 클래스 로더를 사용하는 경우, 당신은 전체 경로를 사용해야합니다

getClass().getClassLoader().getResource("/...path.../file.fxml")