InvocationTargetException lors de l'exécution d'un programme javafx

donc cela a fonctionné dans l'exemple de javafx quand mon pc avait JDK 1.7.0 donc cela peut être la nouvelle version de FX dans java8 cependant;

je reçois un bon stack-trace

jfx-project-run:
Executing E:workspacePathFinderAppdistrun1095471771PathFinderApp.jar using platform C:Program FilesJavajdk1.8.0jre/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.access0(LauncherImpl.java:56)
    at com.sun.javafx.application.LauncherImpl.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.access0(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.run(LauncherImpl.java:837)
    at com.sun.javafx.application.PlatformImpl.run(PlatformImpl.java:335)
    at com.sun.javafx.application.PlatformImpl.run(PlatformImpl.java:301)
    at com.sun.javafx.application.PlatformImpl.run(PlatformImpl.java:298)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.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.access0(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication.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

en gros, me dire que quelque chose ne va pas ici "com/rpg/gui/main.fxml:11"

et c'est

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

donc je peux comprendre qu'il n'aime pas quelque chose à faire avec le contrôleur principal, donc il doit y avoir quelque chose à faire avec le chargement du fxml et du contrôleur n'est-ce pas? mais c'est à peu près où mes idées pour la fin

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

c'est la méthode qui jette tout dans n'importe qui expérimenté dans javaFX ou connaître des changements dans java8 qui ferait cela??

16
demandé sur Matthew Optional Meehan 2014-04-17 15:48:16

5 réponses

MainController n'a pas un zéro en argument du constructeur. Si le FXMLLoader rencontres fx:controller attribut sur l'élément root, il tente de créer une instance de ce controller en appelant (effectivement) le constructeur à argument zéro de la classe spécifiée dans l'attribut.

Pour la résoudre (le plus simple), supprimer fx:controller attribut du fichier FXML, et de régler le contrôleur "à la main" sur le FXMLLoader. Vous devez créer un FXMLLoader instance à la place de s'appuyer sur la statique load(...) méthode:

FXMLLoader loader = new FXMLLoader(getClass().getResource("main.fxml"));
loader.setController(new MainController(path));
Pane mainPane = loader.load();
15
répondu James_D 2017-01-06 22:19:47

j'ai connu le même problème et que vous voulez partager un peu lié. J'utilise java 8 et Netbeans 8.1 et quand j'ai créé une Application javafx FXML j'ai eu celle-ci.

Voici quelques conseils:

  1. Lorsque vous créez un nouveau projet nettoyer et créer votre projet avant d'essayer de courir.
  2. si vous renommez un fichier (controller, fxml) IDE n'appliquez pas de modifications à D'autres fichiers au moins Netbeans ne le fait pas. Donc, vous avez à changer ces noms de fichiers dans d'autres fichiers manuellement.
  3. vous pouvez définir controller dans fxml fichier ou dans main classe. Si vous souhaitez définir contrôleur main classe utilisez la méthode décrite par @James_D. Si vous souhaitez définir en fxml le fichier que d'utiliser fx:controller l'attribut

     fx:controller="yourProjectName.yourFXMLDocumentControllerName"
    

    et dans la classe principale référence

    Parent root = FXMLLoader.load(getClass().getResource("yourFXMLFileName.fxml"));
    
  4. Si vous pensez que tout est correct, mais vous obtenez toujours l'erreur nettoyer et créer votre projet à nouveau et essayer de courir.

j'Espère que cela aiderait quelqu'un.

3
répondu Inzimam Tariq IT 2017-01-06 23:29:57

je rencontre également que beaucoup de... Il semble y avoir un bug dans Scenebuilder/netbeans 8, où après avoir enregistré dans Scenebuilder, il crée un autre xmlns:fx="..."de sorte que peut être un problème...

aussi, en regardant les fxml que j'ai en utilisant java8, j'ai ceci: xmlns="http://javafx.com/javafx/8" xmlns: fx="http://javafx.com/fxml/1"

où j'ai remarqué votre est: xmlns: fx="http://javafx.com/fxml"

2
répondu jdub1581 2014-05-14 20:41:00

Vous avez utilisé

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

Pane mainPane = FXMLLoader.load(getClass().getResource("/main.fxml"));
2
répondu idzik78 2018-10-03 11:34:21

si Quelqu'un ne corrige pas le problème en suivant les réponses, la manière simple est de créer une nouvelle classe vide FXML puis cliquez sur modifier du fxml causin le problème et copier le code xml pour la nouvelle classe . Allez à démarrer() methode, de modifier la:

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

Pane mainPane = FXMLLoader.load(getClass().getResource("newClass.fxml"));
0
répondu Abderrahmane 2018-08-28 08:59:16