运行javafx程序时发生InvocationTargetException

所以这在javafx的例子中起作用,当时我的电脑有jdk 1.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.() 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"

那条线是

  

所以我可以弄清楚它不喜欢与主控制器有关,所以它必须与加载fxml和控制器的权利有关吗? 但这就是我的想法结束的地方

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

这是在javaFX中经验丰富的任何人抛出一切的方法,或者知道java8中的任何变化都会这样做?

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

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

 FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml")); loader.setController(new MainController(path)); Pane mainPane = loader.load(); 

我遇到了同样的问题,并希望与之分享一些相关内容。 我正在使用java 8和Netbeans 8.1,当我创建一个javafx FXML应用程序时,我得到了这个。
以下是一些提示:

  1. 在创建新项目之前清理并在尝试运行之前构建项目。
  2. 如果重命名任何文件(controller,fxml),IDE不会对其他文件应用更改,至少Netbeans不这样做。 因此,您必须手动更改其他文件中的这些文件名。
  3. 您可以在fxml文件或main类中定义控制器。 如果要在main类中定义控制器,请使用@James_D描述的方法。 如果要在fxml文件中定义, fxml使用fx:controller属性作为

      fx:controller="yourProjectName.yourFXMLDocumentControllerName" 

    并在主类中将其引用为

     Parent root = FXMLLoader.load(getClass().getResource("yourFXMLFileName.fxml")); 
  4. 如果你认为一切都是正确的,但你仍然可以清除错误再次构建项目并尝试运行。

希望它会帮助某人。

我也遇到了很多……在Scenebuilder / netbeans 8中似乎有一个错误,在Scenebuilder中保存后,它会创建另一个xmlns:fx =“…”,这可能是一个问题……

另外,看看我使用java8的fxml,我有这些:xmlns =“http://javafx.com/javafx/8”xmlns:fx =“http://javafx.com/fxml/1”

在哪里我注意到你的是:xmlns:fx =“http://javafx.com/fxml”

你用过

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

尝试

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

如果Any One没有通过以下答案解决问题,那么简单的方法是创建新的fxml Empty类,然后单击编辑 fxml causin问题并将xml代码复制到新类。 转到start()方法,更改:

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

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