InvocationTargetException bij het uitvoeren van een javafx-programma

Dus dit werkte in het voorbeeld van javafx toen mijn pc jdk 1.7.0 had, dus dit kan echter de nieuwe versie van FX in java8 zijn;

Ik krijg een mooie stacktrace

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

zegt me eigenlijk dat er hier iets mis is "com/rpg/gui/main.fxml:11"

en die regel is

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

zodat ik erachter kan komen dat het iets met de hoofdcontroller niet leuk vindt, dus het moet iets te maken hebben met het laden van de fxml en de controller, toch? maar dat is ongeveer waar mijn ideeën eindigen

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

dat is de methode waarmee het alles in iemand gooit die ervaring heeft met javaFX of weet van enige veranderingen in java8 die dit zouden doen??


Antwoord 1, autoriteit 100%

Uw MainController heeft geen nul-argument constructor. Als de FXMLLoader een fx:controller-attribuut tegenkomt op het root-element, probeert het een instantie van die controller te maken door (effectief) de nul-argumentconstructor van de klasse aan te roepen gespecificeerd in het kenmerk.

Om dit op te lossen (op de eenvoudigste manier), verwijdert u het kenmerk fx:controller uit het FXML-bestand en stelt u de controller “met de hand” in op de FXMLLoader. U moet een FXMLLoader-instantie maken in plaats van te vertrouwen op de statische load(...)-methode:

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

Antwoord 2, autoriteit 25%

Ik had hetzelfde probleem en wil er iets over vertellen. Ik gebruik java 8 en Netbeans 8.1 en toen ik een javafx FXML-toepassing maakte, kreeg ik deze.
Hier zijn enkele tips:

  1. Wanneer u een nieuw project maakt, maak dan uw project schoon en bouw voordat u het probeert uit te voeren.
  2. Als je een bestand (controller, fxml) hernoemt, past IDE geen wijzigingen toe op andere bestanden, tenminste Netbeans doet dit niet. U moet die bestandsnamen in andere bestanden dus handmatig wijzigen.
  3. Je kunt de controller definiëren in het fxml-bestand of in de main-klasse.
    Als je de controller in de klasse main wilt definiëren, gebruik dan de methode beschreven door @James_D. Als u een fxml bestand wilt definiëren, gebruik dan het fx:controller attribuut als

     fx:controller="yourProjectName.yourFXMLDocumentControllerName"
    

    en in de hoofdklasse verwijzen ernaar als

    Parent root = FXMLLoader.load(getClass().getResource("yourFXMLFileName.fxml"));
    
  4. Als je denkt dat alles correct is, maar je krijgt nog steeds de foutmelding schoon en bouw je project opnieuw en probeer het uit te voeren.

Ik hoop dat het iemand zou helpen.


Antwoord 3, autoriteit 15%

Je gebruikte

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

Probeer

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

Antwoord 4, autoriteit 10%

Ik kom dat ook vaak tegen… Er lijkt een bug te zijn in Scenebuilder/netbeans 8, waarbij bij het opslaan in Scenebuilder een andere xmlns:fx=”…” wordt aangemaakt, dus dat kan een probleem zijn.. .

Ook kijkend naar fxml’s die ik heb met java8, heb ik deze:
xmlns=”http://javafx.com/javafx/8″ xmlns:fx=”http://javafx.com/fxml/1″

waar ik zag dat die van jou is:
xmlns:fx=”http://javafx.com/fxml”


Antwoord 5, autoriteit 5%

In Uitvoeren >> Configuraties bewerken

Voeg deze regel toe aan VM-opties:

--module-path /path/to/JavaFX/lib --add-modules=javafx.controls,javafx.fxml

dit werkte voor mij na een paar keer zoeken


Antwoord 6

Als iemand het probleem niet oplost door de volgende antwoorden te volgen, is de eenvoudige manier om een ​​nieuwe fxml Lege klasse aan te maken, klik dan op bewerken van de fxml die het probleem veroorzaakt en kopieer de xml-code naar de nieuwe klas .
Ga naar de start() methode, verander de:

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

naar

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

Antwoord 7

layout.getChildren().addAll(choiceBox, button);

Ik probeerde een knop aan de lay-out toe te voegen, maar ik had geen knopobject gedefinieerd, het zag er zo uit:

Button button;

Toen ik dit deed:

button = new Button("Click me");

Alles begon goed te werken.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes