FXML JavaFX应用程序通过JNLP java.lang.NullPointerException运行:需要位置

FXML JavaFX应用程序通过JNLP java.lang.NullPointerException运行:需要位置,javafx,java-web-start,jnlp,fxmlloader,Javafx,Java Web Start,Jnlp,Fxmlloader,交叉张贴: • • 我尝试将JavaFXML应用程序部署为Web Start,但下面有一个异常。Jar可以正常工作,也可以作为自包含的应用程序部署。我在netbeansv中构建了一个项目。8.0.2. 我在互联网上发现了这么多类似的线程,但要么解决方案有效,要么我认为解决方案是正确的 在所有的解决方案中,这一行已经确定 SomeClass root=FXMLLoader.load(getClass().getResource(“someFXML.fxml”) 作为一个原因 解决办法是: 使用p

交叉张贴: • •

我尝试将JavaFXML应用程序部署为Web Start,但下面有一个异常。Jar可以正常工作,也可以作为自包含的应用程序部署。我在netbeansv中构建了一个项目。8.0.2. 我在互联网上发现了这么多类似的线程,但要么解决方案有效,要么我认为解决方案是正确的

在所有的解决方案中,这一行已经确定

SomeClass root=FXMLLoader.load(getClass().getResource(“someFXML.fxml”)

作为一个原因

解决办法是:

  • 使用path/someFXML.fxml
  • 使用FXMLLoader.load(getClass().getClassLoader().getResource(“someFXML.fxml”)
  • 使用fxmloader.load(getClass().getClassLoader().getResource(“packageName/someFXML.fxml”)
  • 检查文件是否存在
  • 在罐子上签名 我可能已经试过了所有的

    我认为解决方案不取决于所示的行

    例外情况

    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 xy.XY.start(XY.java:36)
    at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
    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)
    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(FXApplet2.java:150)
    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)
    at java.lang.Thread.run(Unknown Source)
    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 xy.XY.start(XY.java:36)
    at com.sun.javafx.applet.FXApplet2$2.run(FXApplet2.java:134)
    ... 7 more
    
    主类

    package testfxmlpackage;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    public class TestFXMLPackage extends Application {
    
      @Override
      public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    
        Scene scene = new Scene(root);
    
        stage.setScene(scene);
        stage.show();
      }
      public static void main(String[] args) {
        launch(args);
      }  
    }
    
    控制器

    package testfxmlpackage;
    
    import javafx.fxml.FXML;
    import javafx.scene.text.TextFlow;
    
    public class FXMLDocumentController {
    
       @FXML TextFlow xy;
    
    }
    
    FXML

    <?xml version="1.0" encoding="UTF-8"?>
    <?import java.lang.*?>
    <?import java.util.*?>
    <?import javafx.scene.*?>
    <?import javafx.scene.layout.*?>
    <?import javafx.scene.text.TextFlow?>
    
    <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testfxmlpackage.FXMLDocumentController">
        <children>
            <TextFlow fx:id="xy" layoutX="22.0" layoutY="234.0" prefHeight="74.0" prefWidth="433.0" style="-fx-border-color: ADD8E6;" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="22.0" AnchorPane.rightAnchor="142.0" />               
        </children>
    </AnchorPane>
    

    我还没有尝试过,但是查看一下,我认为一个活跃的安全管理器可能是问题的原因

    可能的解决办法:

    • 尝试通过指定来禁用SecurityManager(如果完全禁用SecurityManager,则不是100%)

    • 设置FXMLLoader的属性。请注意,我已经为FXMLLoader编写了一些实用程序方法,这些方法可以直接设置location属性:
    该库是开源的,可以与以下依赖项一起使用:

    <dependency>
        <groupId>org.drombler.commons</groupId>
        <artifactId>drombler-commons-fx-core</artifactId>
        <version>0.7</version>
    </dependency>
    
    
    org.drombler.commons
    drombler commons fx核心
    0.7
    
    在问题中包括
    jarxvf
    的输出。它是否显示存在
    testfxmlpackage/FXMLDocument.fxml
    ?您可能还对一些关于的想法感兴趣。此外,堆栈跟踪还有:
    位于xy.xy.start(xy.java:36)
    。您确定这是您提供的代码的堆栈跟踪吗?(您没有在XY包中提供XY类,所以这有点奇怪)。我也有同样的问题,有解决方案吗?