I had this problem and found this post. My issue was just a file name issue.
FXMLLoader(getClass().getResource("/com/companyname/reports/" +
report.getClass().getCanonicalName().substring(18).replaceAll("Controller", "") +
".fxml"));
Parent root = (Parent) loader.load();
I have an xml that this is all coming from and I have made sure that my class is the same as the fxml file less the word controller.
I messed up the substring so the path was wrong...sure enough after I fixed the file name it worked.
To make a long story short I think that the problem is either the filename is named improperly or the path is wrong.
ADDITION: I have since moved to a Maven Project. The non Maven way is to have everything inside of your project path. The Maven way which was listed in the answer below was a bit frustrating at the start but I made a change to my code as follows:
FXMLLoader loader = new FXMLLoader(ReportMenu.this.getClass().getResource("/fxml/" + report.getClass().getCanonicalName().substring(18).replaceAll("Controller", "") + ".fxml"));
I know this is a late answer, but I hope to help anyone else who has this problem. I was getting the same error, and found that I had to insert a /
in front of my file path. The corrected function call would then be:
FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/createCategory.fxml"));
// ^
I was getting this exception and the "solution" I found was through Netbeans IDE, simply:
I don't know WHY this worked, but it did!
I converted a simple NetBeans 8 Java FXML application to the Maven-driven one. Then I got problems, because the getResource()
methods weren't able to find the .fxml files. In mine original application the fxmls were scattered through the package tree - each beside its controller class file.
After I made Clean and build in NetBeans, I checked the result .jar in the target folder - the .jar didn't contain any fxml at all. All the fxmls were strangely disappeared.
Then I put all fxmls into the resources/fxml folder and set the getResource method parameters accordingly, for example: FXMLLoader(App.class.getClassLoader().getResource("fxml/ObjOverview.fxml"));
In this case everything went OK. The fxml folder appeared int the .jar's root and it contained all my fxmls. The program was working as expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With