首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX web部署: FXMLLoader NullPointerException

JavaFX web部署: FXMLLoader NullPointerException
EN

Stack Overflow用户
提问于 2014-12-23 11:45:53
回答 1查看 769关注 0票数 2

我想尝试JavaFX web浏览器部署,因此我使用IntelliJ社区版14.0.2 JavaFX应用程序模板启动了一个非常简单的测试项目。下面是代码:(没有插件、外部库或maven)

Main.java

代码语言:javascript
复制
@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上)

代码语言:javascript
复制
@FXML
private TextField textField;

@FXML
private Label label;

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

sample.fxml (布局文件)

代码语言:javascript
复制
<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时,它没有任何问题地运行。但是,当我使用预定义的"JavaFXApp“工件构建它时,它会生成一个html、一个jnlp和一个jar。当我在我的web浏览器(Firefox Nightle64bit)中打开html时,它会给出以下错误:

代码语言:javascript
复制
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

相关代码行似乎是

代码语言:javascript
复制
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

然而,这一行代码在构建并作为单个独立JAR打开时工作得很好!知道错误发生的原因或如何修复吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-24 13:06:30

这个错误有点神秘,但可以理解。您正在获得一个带有本地化消息"Location“的空指针,表明您没有设置查找FXML的位置。

getClass().getResource("sample.fxml")返回null,因此FXMLLoader抛出一个空指针。检查fxml的路径,您可能希望在它前面加上一个'/',比如"/sample.fxml“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27619720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档