2014-12-23 3 views
2

JavaFX 웹 브라우저 배포를 사용하려고 했으므로 IntelliJ 커뮤니티 버전 14.0.2 JavaFX 응용 프로그램 템플릿을 사용하여 매우 간단한 테스트 프로젝트를 시작했습니다. (NO 플러그인, 외부 라이브러리 또는 받는다는)JavaFX 웹 배포 : FXMLLoader NullPointerException

Main.java

@Override 
public void start(Stage primaryStage) throws Exception{ 
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 
    primaryStage.setTitle("Hello World"); 
    primaryStage.setScene(new Scene(root, 300, 275)); 
    primaryStage.show(); 
} 


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

Controller.java (sample.fxml 부착)

@FXML 
private TextField textField; 

@FXML 
private Label label; 

@FXML 
private void setLabelText() { 
    label.setText(textField.getText()); 
} 

sample.fxml (다음은 코드입니다 레이아웃 파일)

<VBox alignment="TOP_CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
     prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/8" 
     xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
    <padding> 
     <Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/> 
    </padding> 
    <TextField fx:id="textField" onAction="#setLabelText"/> 
    <Label fx:id="label" text="Label"> 
     <font> 
     <Font size="96.0"/> 
     </font> 
    </Label> 
</VBox> 

이제 응용 프로그램을 JAR로 빌드하면 w 어떤 문제없이. 그러나 사전 정의 된 "JavaFXApp"이슈를 사용하여 빌드하면 하나의 html, 하나의 jnlp 및 하나의 jar 파일을 생성합니다.

java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at sample.Main.start(Main.java:13) 
    at com.sun.javafx.applet.FXApplet2$2.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/1838209255.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$44/1604839423.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$36/982109627.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.NullPointerException: Location is required. 
    at com.sun.javafx.applet.FXApplet2$2.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/1838209255.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$44/1604839423.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$36/982109627.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at sample.Main.start(Main.java:13) 
    ... 11 more 

코드의 해당 줄의 코드

Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); 

그러나이 같은 줄 것 같습니다 : 내 웹 브라우저에서 HTML을 열 때 (파이어 폭스 박 64 비트)은 그것은 나에게 다음과 같은 오류를 제공합니다 단일 독립 실행 형 JAR로 빌드하고 열면 올바르게 작동합니다! 오류가 발생하는 이유 또는 해결 방법에 대한 의견이 있으십니까?

답변

0

오류는 다소 이해하기 쉽지만 이해할 수 있습니다. FXML을 찾을 위치를 설정하지 않았다는 것을 나타내는 "Location is required"라는 현지화 된 메시지가있는 널 포인터가 나타납니다.

getClass(). getResource ("sample.fxml")는 null을 반환하므로 FXMLLoader는 nullpointer를 throw합니다. fxml의 경로를 확인하십시오. "/sample.fxml"과 같이 '/'를 앞에 붙여야 할 수도 있습니다.

+0

문제를 해결하지 못했습니다. (원래 게시물에서 말했듯이 독립형 JAR은 "/"앞에 붙이지 않아도 괜찮습니다. 단지 오류를 던지는 JavaFX 아티팩트입니다 ... – suushiemaniac

+0

그러면 모양이 바뀝니다. classpath 문제처럼 jar 내용을 검사하여 sample.fxml이 포함되어 있는지 확인할 수 있습니다. – Terraego