java.util.MissingResourceException – How to resolve Missing Resource Exception
In this example we will discuss about MissingResourceException. This exception is a runtime exception, and it’s thrown when a resource is missing.
MissingResourceException extends RuntimeException which is the base class of all exceptions that can be thrown during the normal operation of Java Virtual Machine. By extending RuntimeException, we don’t have to catch MissingResourceException in the code, neither to declare main as throws clause.
MissingResourceException exists since JDK 1.1.
The structure of MissingResourceException
Constructor
MissingResourceException(String s, String className, String key)Constructs a
MissingResourceExceptionwith the specified information.
The MissingResourceException in Java
Resource files are files that have the .property extension and hold some data. Mostly, they are used as a way to store strings in order to achieve internationality for the application.
To see when the MissingResourceException is thrown, create a class called MissingResourceFile with this source code:
MissingResourceFile.java
package com.javacodegeeks.examples;
import java.util.ResourceBundle;
public class MissingResourceFile {
public static void main(String[] args) {
//this will throw the exception
ResourceBundle myResources = ResourceBundle.getBundle("MyResources");
}
}
In this example, I try get the resources called “MyResource”, which in fact doesn’t exist.
When you run the code, you will get this output:
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name MyResources, locale en_US at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) at java.util.ResourceBundle.getBundleImpl(Unknown Source) at java.util.ResourceBundle.getBundle(Unknown Source) at com.javacodegeeks.examples.MissingResourceFile.main(MissingResourceFile.java:9)
This output was expected, since there is no resource file called “MyResources” in our project.
The same would happen if the resource file exists, but the resource required does not exist. To see this, create a Java class called MissingResource with this source code:
MissingResource.java
package com.javacodegeeks.examples;
import java.util.ResourceBundle;
public class MissingResource {
public static void main(String[] args) {
ResourceBundle myResources =
ResourceBundle.getBundle("com.javacodegeeks.examples.resources");
String name = myResources.getString("name");
String surname = myResources.getString("surname");
String age = myResources.getString("age");
System.out.println(String.format("Hello! I'm %s %s, %s years old",name, surname, age));
}
}
Also, put this resource file, called “resources.property”, in the same directory as MissingResource:
resources.property
name = John surname = Doe
I access the file with the proper name, and then try to get three strings, by using their keys.
You can see that I am requiring an inexistent key, the “age” key. This will throw the exception. So, when I try to run it, I get this output:
Exception in thread "main" java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key age at java.util.ResourceBundle.getObject(Unknown Source) at java.util.ResourceBundle.getString(Unknown Source) at com.javacodegeeks.examples.MissingResource.main(MissingResource.java:12)
More about MissingResourceException
MissingResourceException is usually thrown when the resource required by the application is not found. This means that the resource file is not there, or that the key which we are trying to get is not there.
How to deal with MissingResourceException
When you encounter on a MissingResourceException, you should firstly recognize if the problem is with the resource file name, its location, or with any key which is being accessed by the program.
After you do this, then you put the proper file name, or the proper key, or put the required key-value pair in the .property file.
Download Code
You can download the full source code of this example here : MissingResourceExceptionExample