Location is required exception when loading FXML file
The short answer is getClass().getResource("sample.fxml")
returns null
silently if the resource cannot be found on the runtime classpath, not the current directory etc.
So this depends on your IDE project setup, if you're using eclipse try adding the folder that sample.fxml
resides in the run configuration.
Some ideas...
- try
getClass().getResource("/sample.fxml")
instead... - try moving
sample.fxml
into the resources folder. I don't know much about your IDE, but I suspect that folder is only used for.java
files... this is certainly true for gradle projects in eclipse - resources have to be in thesrc/main/resources
tree as only that is added to the runtime classpath...
JavaFX Location is required. even though it is in the same package
Moving the file to the main/resources directory worked.
JAVAFX - Exception caused by Location is not set when loading fxml file
I see you are using maven and jetbrains. This exception does indeed come when the fxml file's location is wrong in the code. You are using maven. Maven is searching for resources (like fxml files) in it's resources folder. The maven project's root folder is where pom.xml is. I will reference it as {mavenRoot}.
So let's assume, your fxml file is in this path:
{mavenRoot}/src/main/resources/fxml/sample.fxml
Then you can use theese two lines to set up your fxml loader:
FXMLLoader loader1 = new FXMLLoader();
loader1.setLocation(getClass().getResource("/fxml/sample.fxml"));
In a maven project, the getResource() will search the {mavenRoot}/src/main/resources
folder.
JavaFX exception loading FXML file
In your stacktrace there are 2 exceptions.
The one at the end simply indicates that root
is null when you try to pass it to the constructor of Scene
. This happens since loading the fxml failed. This is not because of an invalid fxml url, it's the result of creating a Image
with a value that is not a URL as constructor parameter in the ImgListController.initialize
method. Probably you pass an absolute file path.
You could use the File
or Path
classes to get a URL for a file:
File f = ...
URL url = f.toURI().toURL();
Image img = new Image(url.toExternalForm());
Note: You should not simply proceed with your logic if an exception happens and the rest of the method relies on the try-block from finishing without an exception. This way you get 2 exceptions, not just one.
Alternatives would be:
Rethrowing
throw new IllegalStateException("This should not happen", e1);
- Returning after showing an error to the user/logging the error.
- ect...
JavaFX and maven: NullPointerException: Location is required
Make sure that your sample.fxml
is in the src/main/resources/
directory (or a subdirectory). Then you can access the file like this:
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("sample.fxml"));
Explanation:
During the compile phase all resources and classes get copied to target/classes/
. So your fxml file resides in this directory and your class in a subdirectory regarding its package name. If you call getClass().getResource("sample.fxml");
the file will be searched relative to the class file which will be this directory: target/classes/sample/
.
Calling .getResource()
on the classloader sets the relative search path to target/classes/
and therefore your file gets found.
P.S. You could also write:
Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));
javaFX, throws NullPointerException, Location is required
getClass().getClassLoader().getResource(...)
will load a resource from a path relative to the classpath. Since you placed the FXML file in the application
pacakge, you need:
Parent root=FXMLLoader.load(getClass().getClassLoader().getResource("application/Main.fxml"));
If you just use getClass().getResource(...)
, and do not prefix the path with /
, it will load from a path relative to the current class. So
Parent root=FXMLLoader.load(getClass().getResource("Main.fxml"));
should also work.
Make sure that your FXML file is being exported to the build folder, along with the .class
files.
Related Topics
Java Class.Cast() VS. Cast Operator
Mapping a Specific Servlet to Be the Default Servlet in Tomcat
Utf-8 Text Is Garbled When Form Is Posted as Multipart/Form-Data
Java Reflection: How to Get the All Getter Methods of a Java Class and Invoke Them
Please Explain About Insertable=False and Updatable=False in Reference to the JPA @Column Annotation
How to Use Multiple Scanner Objects on System.In
Double Calculation Producing Odd Result
How to Configure JPA for Testing in Maven
Read a File Line by Line in Reverse Order
Bufferedimage Not Being Cleared Before Each Rendering
How to Avoid 'Instanceof' When Implementing Factory Design Pattern
Strange Java Null Behavior in Method Overloading
How to Make Anonymous Inner Classes in Java Static
Is There a Way in Java to Determine If a Path Is Valid Without Attempting to Create a File