当前位置: 首页 > 知识库问答 >
问题:

运行javafx程序时的InvocationTargetExc0019

贾俊艾
2023-03-14

因此,在javafx的例子中,当我的pc上有JDK1.7时,这就起到了作用。0,因此这可能是java8中FX的新版本;

我得到了很好的堆栈跟踪

jfx-project-run:
Executing E:\workspace\PathFinderApp\dist\run1095471771\PathFinderApp.jar using platform C:\Program Files\Java\jdk1.8.0\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
    at java.lang.Thread.run(Thread.java:744)
Caused by: javafx.fxml.LoadException: 
file:/E:/workspace/PathFinderApp/dist/run1095471771/PathFinderApp.jar!/com/rpg/gui/main.fxml:11

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617)
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:104)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:937)
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:976)
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:738)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3120)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3113)
    at com.rpg.gui.GUI.loadMainPane(GUI.java:34)
    at com.rpg.gui.GUI.initialize(GUI.java:20)
    at Main.start(Main.java:20)
    at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
    at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
    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.access$300(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    ... 1 more
Caused by: java.lang.InstantiationException: com.rpg.gui.MainController
    at java.lang.Class.newInstance(Class.java:418)
    at sun.reflect.misc.ReflectUtil.newInstance(ReflectUtil.java:51)
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:932)
    ... 26 more
Caused by: java.lang.NoSuchMethodException: com.rpg.gui.MainController.<init>()
    at java.lang.Class.getConstructor0(Class.java:2971)
    at java.lang.Class.newInstance(Class.java:403)
    ... 28 more
Exception running application Main
Java Result: 1

基本上是告诉我这里出了问题“com/rpg/gui/main.fxml:11”

那条线是

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.rpg.gui.MainController">

所以我可以看出它不喜欢与主控制器有关,所以它必须与加载fxml和控制器有关,对吗?但这就是我的想法的终点

MainController mainController = new MainController(path);
Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));
Window.setMainController(mainController);
Window.swap(path+"content.fxml");

这就是它抛出一切在任何有javaFX经验的人或知道任何java8的变化会这样做的方法??

共有3个答案

路扬
2023-03-14

你用了

Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));

试试看

Pane mainPane = FXMLLoader.load(getClass().getResource("/main.fxml"));
徐隐水
2023-03-14

我面临着同样的问题,想分享一点与之相关的东西。我正在使用java 8和Netbean 8.1,当我创建一个javafx FXML应用程序时,我得到了这个。
这里有一些提示:

>

  • 当您在尝试运行之前创建新项目并构建项目时。
  • 如果您重命名任何文件(控制器,fxml)IDE不应用更改到其他文件,至少Netbean没有这样做。因此,您必须手动更改其他文件中的文件名。
  • 可以在fxml文件或main类中定义控制器。如果您想在main类中定义控制器,请使用@James_D描述的方法。如果要在fxml文件中定义,请使用fx: Controlers属性作为

     fx:controller="yourProjectName.yourFXMLDocumentControllerName"
    

    在主类中引用它作为

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

    希望它能帮助别人。

  • 韦宣
    2023-03-14

    您的Main Controller没有零参数构造函数。如果FXMLLoader在根元素上遇到fx: Controler属性,它会通过(有效地)调用属性中指定的类的零参数构造函数来创建该控制器的实例

    为了解决这个问题(最简单的方法),从FXML文件中删除fx: Controler属性,并在FXMLLoader上手动设置控制器。您需要创建一个FXMLLoader实例,而不是依赖于静态的load(...)方法:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
    loader.setController(new MainController(path));
    Pane mainPane = loader.load();
    
     类似资料:
    • 问题内容: 因此,这在我的电脑具有jdk 1.7.0的javafx示例中起作用,因此,这可能是java8中FX的新版本。 我得到了很好的堆栈跟踪 基本上告诉我这里有问题 那条线是 因此我可以弄清楚它与主控制器无关,因此必须与加载fxml和控制器有关?但这就是我的想法的结局 这就是它的方法,它将把所有东西扔给任何有javaFX经验的人,或者知道java8中有任何变化的人会这样做吗? 问题答案: 您没

    • 问题内容: 我正在尝试创建一个正在运行的JavaFX程序-但我正在尝试获取一个进度条以在运行时进行更新。 但是,该程序似乎只是冻结并锁定,直到完成处理为止。 有谁知道我如何让程序在运行时不冻结-以及让进度条在进程运行时进行更新? 谢谢 问题答案: 您可以将进度条进度放在a中,以便稍后再执行。

    • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运

    • 版本 openjdk版本“11.0.11”2021-04-20 如果可能的话,请不要告诉我像我以前看到其他人回答的那样“阅读基础知识”。我只是不确定为什么我的代码不能在我的最后一个项目中运行。 提前谢谢你!

    • 问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您

    • > 我开发了一个javaFx应用程序,并在Mac的com.zenjava maven插件的帮助下创建了该应用程序的中间包。 bundle是用JDK:1.7.0_40.jdk创建的