签名的 Javafx jar 工作并执行,但 jnlp 对 javafx jar 的引用找不到对 Gui.fxml 文件的引用

signed Javafx jar works and executes, but jnlp reference to javafx jar can't find reference to Gui.fxml file

我正在尝试将 javafx 应用程序嵌入到项目的网页中。我已成功导出并执行此 javafx jar 文件。该文件作为可执行 jar 文件从 eclipse 导出,然后部署应用程序以创建 html、jnlp 和我的 jar 文件的副本。

我签署了我的 jar,确认它已签署,然后在 chrome 中打开 html 文件。 javafx 应用程序尝试加载,但出现此错误:

    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 application.Main.start(Main.java:19)
    at com.sun.javafx.applet.FXApplet2.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null0(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda/5729401.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater1(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda/8383735.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$null5(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda/14272056.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.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null0(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda/5729401.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater1(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda/8383735.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$null5(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda/14272056.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 application.Main.start(Main.java:19)
    ... 11 more
CacheEntry[file:/C:/Users/tso5912/Desktop/WebDriverEmbed/webDriverDeploy/webdriverjar2.jar]: updateAvailable=true,lastModified=Fri May 22 10:21:49 CDT 2015,length=107020288

Main.java:19 在代码的主要应用中指定这一行:

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

package application;

import java.io.IOException;

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

public class Main extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        Parent root;
        try
        {
            root = FXMLLoader.load(this.getClass().getResource("Gui.fxml"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return;
        }

        Scene scene = new Scene(root);
        scene.getStylesheets().add(this.getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.sizeToScene();
        primaryStage.show();
        primaryStage.setResizable(true);
        primaryStage.setTitle("WebDriver");

    }

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

项目设置为:

我还检查了 Gui.fxml 文件是否与在 jar 文件中编译的 Main.class 位于同一文件夹中(将 jar 转换为 zip 并检查了zip) 和 Gui.fxml 都直接在应用程序文件夹中。

我意识到 jnlp 文件找不到 .fxml 文件,但我不知道如何修复它,因为 jar 文件已经成功地自行执行(这意味着 jar 文件是查找 .fxml 文件)。所有通过 jnlp 文件打开 jar 的尝试都以前面的错误结束(包括嵌入式和 webstart 使用)。

这是我的 jnlp 文件:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="WebDriver.jnlp">
  <information>
    <title>Sample JavaFX Application</title>
    <vendor>Unknown vendor</vendor>
    <description>Sample JavaFX 2.0 application.</description>
    <offline-allowed/>
  </information>
  <resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="webdriverjar.jar" size="31252632" download="eager" />
  </resources>
  <jfx:javafx-desc  width="200" height="200" main-class="application.Main"  name="WebDriver" />
  <update check="background"/>
</jnlp>

感谢任何帮助。

我相信您需要注意实际的 Apache 服务器(或类似服务器)才能正确编译 JNLP。尝试将其托管在服务器上,而不仅仅是 运行 桌面上的文件,看看是否有帮助。