Can';t从Jar运行javaFX/Spring引导应用程序:未设置位置

Can';t从Jar运行javaFX/Spring引导应用程序:未设置位置,java,spring,eclipse,javafx,jar,Java,Spring,Eclipse,Javafx,Jar,我一直在使用JavaFX和spring boot开发一个应用程序,当我从Eclipse IDE启动它时,它工作得很好,但是如果我使用以下方法运行生成的jar: java-jar AppXX.jar它给出了以下错误: Exception in Application init method Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.inter

我一直在使用JavaFX和spring boot开发一个应用程序,当我从Eclipse IDE启动它时,它工作得很好,但是如果我使用以下方法运行生成的jar: java-jar AppXX.jar它给出了以下错误:

    Exception in Application init method
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.RuntimeException: Exception in Application init method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/XX/target/MDV2.0-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/X/anotherProject/view/Welcome.fxml

        at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
        at com.X.anotherProject.AnotherProjectApplication.init(AnotherProjectApplication.java:42)
        ... 3 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
        ... 7 more
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source)
        at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source)
        at javafx.base/javafx.event.Event.fireEvent(Unknown Source)
        at javafx.graphics/javafx.scene.Node.fireEvent(Unknown Source)
        at com.X.anotherProject.Controller.WelcomeController.FireAnEvent(WelcomeController.java:464)
        at com.X.anotherProject.Controller.WelcomeController.initialize(WelcomeController.java:338)
        ... 17 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
        ... 31 more
Caused by: javafx.fxml.LoadException:
file:/C:/Users/XX/target/MDV2.0-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/X/anotherProject/view/Kits%20de%20migration.fxml

        at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
        at com.sopraMdv.anotherProject.Controller.WelcomeController.loadInMainPane(WelcomeController.java:453)
        at com.X.anotherProject.Controller.WelcomeController.press(WelcomeController.java:398)
        ... 41 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
        ... 46 more
Caused by: java.lang.IllegalStateException: Location is not set.
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
        at com.X.anotherProject.Controller.WelcomeController.loadInMainPane(WelcomeController.java:453)
        at com.X.anotherProject.Controller.KitListController.AddElemnt(KitListController.java:115)
        at com.X.anotherProject.Controller.KitListController.initialize(KitListController.java:98)
        ... 56 more
以下是我在类中加载FXML文件的方式:

public static void main(String[] args) {

        Application.launch(args);
    }



    @Override
    public void init() throws Exception {

        springContext = SpringApplication.run(AnotherProjectApplication.class);
        FXMLLoader fxmlLoader= new FXMLLoader(getClass().getResource("/com/X/anotherProject/view/Welcome.fxml"));
        springContext.getAutowireCapableBeanFactory().autowireBean(this);
        fxmlLoader.setControllerFactory(AnotherProjectApplication.springContext::getBean);
        rootNode=fxmlLoader.load();
    }
请注意,我检查了许多相关问题,但没有一个有效。 问题是
getClass().getResource()
找不到FXML文件。 当我用Winrar打开jar时,我在给定路径中找到了该文件:

文件:/C:/Users/XX/target/MDV2.0-0.0.1-SNAPSHOT.jar/BOOT-INF/classes/com/X/anotherProject/view/Welcome.fxml


从堆栈跟踪中,它看起来确实找到了您的
Welcome.fxml
文件以及第二个fxml文件,但第三个文件失败。是否有嵌套的FXML文件(即
fx:include
)?在StackOverflow上被问了很多次,你的问题的答案在那里吗?谢谢@Slaw,事实上我已经嵌套了FXML文件,在检查了所有FXML文件后,我发现一些文件有拼写错误,例如,文件名是“Kit.FXML”,大写为K,我在代码中添加了“Kit.FXML”。但问题是,Eclipse IDE并没有遇到字母差异的问题,但当我运行jar文件时,它会引发错误。我已经修复了拼写错误,现在一切正常,感谢您的帮助。从IDE运行应用程序时,您的代码不会打包在jar文件中。这意味着应用程序正在使用底层操作系统的文件系统,该文件系统可能区分大小写,也可能不区分大小写。例如,Windows通常具有不区分大小写的文件系统。然而,一旦打包到JAR文件中,“文件系统”总是区分大小写的。简而言之,在引用资源时,请确保使用准确的拼写和大小写。