So this worked in the example from javafx when My pc had jdk 1.7.0 so this may be the new version of FX in java8 however;
I get a nice stack-trace
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
basically telling me something is wrong here "com/rpg/gui/main.fxml:11"
and that line is
<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.rpg.gui.MainController">
so I can figure out that it doesn't like something to do with the main controller, so it has to be somthing to do with loading the fxml and the controller right? but thats about where my ideas end
MainController mainController = new MainController(path);
Pane mainPane = FXMLLoader.load(getClass().getResource("main.fxml"));
Window.setMainController(mainController);
Window.swap(path+"content.fxml");
that's the method it throws everything in anyone experienced in javaFX or know of any changes in java8 that'd do this??
I faced the same problem and want to share a little bit related to it. I'm using java 8 and Netbeans 8.1 and when I created a javafx FXML Application I got this one.
Here are some tips:
You can define controller either in
fxml
file or inmain
class. If you want to define controller inmain
class use the method described by @James_D. If you want to define infxml
file than usefx:controller
attribute asand in main class reference it as
Hope it would help someone.
I also encounter that a lot... There seems to be a bug in Scenebuilder/netbeans 8, where upon saving in Scenebuilder, it creates another xmlns:fx="..." so that may be an issue...
Also, looking at fxml's i have using java8, I have these: xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
where I noticed your's is: xmlns:fx="http://javafx.com/fxml"
You used
Try
If Any One does not fix the problem by following answers, The simple way is to create new fxml Empty class then click on edit of the fxml causin the problem and copy the xml code to the new class . Go to the start() methode, change the:
to
Your
MainController
doesn't have a zero-argument constructor. If theFXMLLoader
encounters afx:controller
attribute on the root element, it attempts to create an instance of that controller by (effectively) calling the zero-argument constructor of the class specified in the attribute.To fix this (the simplest way), remove the
fx:controller
attribute from the FXML file, and set the controller "by hand" on theFXMLLoader
. You need to create anFXMLLoader
instance instead of relying on the staticload(...)
method:For anyone struggling with JDK11 / JavaFX11
The reason I was getting this error is because the project was dependent on a UI module which contained the FXML references and thus graphics configuration. I noticed these lines in the compile log dump below:
Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class academy.learnprogramming.ui.Main (in module academy.learnprogramming.common) because module academy.learnprogramming.common does not export academy.learnprogramming.ui to module javafx.graphics
So
Assuming this is NOT a maven project, Project/module-name/src/module-info.java you needed to make sure the module system had access to all your modules in the project:
FOR REFERENCE: