gpt4 book ai didi

从编译的 jar 运行时出现 javafx.fxml.LoadException

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:34 27 4
gpt4 key购买 nike

当从 IntelliJ 本地运行时,我的 JavaFX 应用程序启动正常,但是当它被编译成 jar 并可供客户端中的用户访问时,我收到以下异常。知道为什么会这样吗?

(07:56:06) javafx.fxml.LoadException:
unknown path:10

(07:56:06) at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)

(07:56:06) at javafx.fxml.FXMLLoader.access$700(Unknown Source)
(07:56:06) at javafx.fxml.FXMLLoader$ValueElement.processAttribute(Unknown
Source)
(07:56:06) at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttr
ibute(Unknown Source)
(07:56:06) at javafx.fxml.FXMLLoader$Element.processStartElement(Unknown So
urce)
(07:56:06) at javafx.fxml.FXMLLoader$ValueElement.processStartElement(Unkno
wn Source)
(07:56:06) at javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
(07:56:06) at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
(07:56:06) at javafx.fxml.FXMLLoader.load(Unknown Source)
(07:56:06) at scripts.MassFighter.GUI.Main.start(Main.java:22)
(07:56:06) at scripts.MassFighter.MassFighter.lambda$showAndWaitGUI$0(MassF
ighter.java:114)
(07:56:06) at scripts.MassFighter.MassFighter$$Lambda$351/222230364.run(Unk
nown Source)
(07:56:06) at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unkno
wn Source)
(07:56:06) at com.sun.javafx.application.PlatformImpl$$Lambda$53/1296636313
.run(Unknown Source)
(07:56:06) at java.security.AccessController.doPrivileged(Native Method)
(07:56:06) at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(U
nknown Source)
(07:56:06) at com.sun.javafx.application.PlatformImpl$$Lambda$52/47061671.r
un(Unknown Source)
(07:56:06) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Sou
rce)
(07:56:06) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
(07:56:06) at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown S
ource)
(07:56:06) at com.sun.glass.ui.win.WinApplication$$Lambda$43/157734934.run(
Unknown Source)
(07:56:06) at java.lang.Thread.run(Unknown Source)
(07:56:06) Caused by: java.lang.ClassNotFoundException: scripts.MassFighter.GUI.
Controller
(07:56:06) at java.net.URLClassLoader$1.run(Unknown Source)
(07:56:06) at java.net.URLClassLoader$1.run(Unknown Source)
(07:56:06) at java.security.AccessController.doPrivileged(Native Method)
(07:56:06) at java.net.URLClassLoader.findClass(Unknown Source)
(07:56:06) at java.lang.ClassLoader.loadClass(Unknown Source)
(07:56:06) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
(07:56:06) at java.lang.ClassLoader.loadClass(Unknown Source)
(07:56:06) ... 20 more

我已将 FXML 文件作为资源包含在 list 中:

<resource>scripts/resources/FighterDesign.fxml</resource>

这是我用来查找资源并启动应用程序的代码(Main.java):

private Controller controller;

@Override
public void start(Stage primaryStage) throws Exception {
InputStream in = MassFighter.class.getResourceAsStream("/scripts/MassFighter/GUI/FighterV1.fxml");
if (in != null) {
FXMLLoader loader = new FXMLLoader();
Parent root = loader.load(in);
primaryStage.setTitle("MassFighter V4");
primaryStage.setScene(new Scene(root));
controller = loader.getController();
controller.initialize();
primaryStage.setOnCloseRequest(event -> {
System.out.println("UI Closed - Stopping Script");
if (Environment.getScript().isRunning()) {
Environment.getScript().stop();
}
close();
});
primaryStage.show();
} else {
MassFighter.status = "Input Stream Unavailable"; // the input stream is not null when this error occurs
}
}

这是我将 FXML 文件链接到我的 Controller 的位置:

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" opacity="0.89" prefHeight="431.0" prefWidth="672.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="scripts.MassFighter.GUI.Controller">

这是我用来调用 start 方法的代码:

ui = new Main();
Platform.runLater(() -> {
try {
ui.start(new Stage());
} catch (Exception e) {
e.printStackTrace();
}
});
while (setupRunning) {
Execution.delay(100);
}
Platform.runLater(ui::close);

这是我的项目结构:

Structure

感谢任何帮助,因为我真的很困惑!提前致谢。

最佳答案

我在从 Windows 上构建的 JAR 加载资源文件时遇到了类似的问题,当它在 Linux 中运行时,请参阅以下问题的解决方案...

根据您的情况,您需要输入适用的文件/路径名称。请记住,FMXL 目录(如果您使用的是该目录)将是:

String fileName = "/fxml/this-under-resources.fxml";

您的项目位于:

src/main/resources/
fxml/
this-under-resources.fxml

该语法工作正常,但是,如果您不知道执行路径在哪里;您需要获取与我的 HTML 示例等效的 FXML 源路径,非常类似于:

jar:/fxml/this-under-resources.fxml

或多或少。然后使用类似于 Jetty/HTML 案例的代码,即。

 URL     baseUrl  = SplitFileServerRunner.class.getResource( baseStr ); 
String basePath = baseUrl.toExternalForm();

等等。

自从提出这个问题后,我就继续前进了。我只希望将任何演示资源保留在 JAR 中以用作“后备”并作为默认 View (或其他资源)。

关于“外部路径”,需要记住的是,它是一个运行时事物,因此每次/任何时候运行 JAR 文件;答案应该是正确。只要您有合适的权限和访问权限。祝你好运。

关于从编译的 jar 运行时出现 javafx.fxml.LoadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com