【发布时间】:2021-12-29 18:43:37
【问题描述】:
我有一个需要执行的 JavaFX 程序。 我目前正在尝试使用 IntelliJ IDEA 来执行此操作,它确实创建了 .jar,但是当我尝试单击应该弹出一个窗口的可点击项目时,它不会弹出一个窗口,而是在控制台中打印此错误:
我还应该指定我在 Project Structure -> Artifacts 中导入了 javaFX 库。
(我已经为另一个项目制作了一个 .jar 可执行文件并且在那里工作正常,但它没有任何弹出窗口,也没有多个 .fxml / 控制器......所以我认为这可能是导致它崩溃的原因,但我不确定)
编辑:另外我忘了说我上面报告的问题只发生在 .jar 中,如果我调试程序/通过 IDE 运行它,它工作得很好。
编辑(错误代码复制粘贴):
Dec 30, 2021 6:51:43 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 16 by JavaFX runtime of version 11.0.2
java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3564)
at javafx.scene.Scene$ClickGenerator.access$8200(Scene.java:3492)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3860)
at javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579)
at javafx.scene.Scene.processMouseEvent(Scene.java:1849)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433)
at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
at com.sun.glass.ui.View.notifyMouse(View.java:942)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782)
... 31 more
Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at Controllers.Home.LWELencoClick(Home.java:521)
... 43 more
【问题讨论】:
-
不要截图错误信息,而是将错误信息作为文本放在问题中,格式为代码(缩进 4 个空格)。请解决这个问题。
-
使用具有 maven 标准目录布局结构的构建工具 (maven) (google it)。使用Idea New JavaFX Project wizard 创建一个新项目并将您的代码移动到新项目中的相关位置。然后按照Maven Shade JavaFX runtime components are missing 的说明进行操作,注意 JavaFX 的可执行 jar 是不受支持的配置。使用 Maven 生成 jar,而不是 Idea 工件系统。
-
Location is not set error表示找不到fxml资源,故障排除为:How do I determine the correct path for FXML files, CSS files, Images, and other resources needed by my JavaFX Application?
-
@jewelsea 您好,我按照您的建议更新了问题,将复制粘贴的错误消息格式化为代码。我也试试你的建议,谢谢
-
@jewelsea 谢谢,我修好了,问题是路径开始时有“..”
标签: java intellij-idea javafx