Java errors can derail your coding flow—especially when you’re unsure why they’re happening. In this guide, we’ll break down the Top 10 common Java errors, explain their causes, and provide actionable fixes. Whether you’re a beginner or a seasoned developer, these solutions will save you hours of debugging!
Table of Contents
1. NullPointerException
Error Message:Exception in thread "main" java.lang.NullPointerException
Cause:
Trying to access a method or property of an object that is null
.
Example:
String text = null;
System.out.println(text.length()); // Throws NullPointerException
Fix:
- Initialize objects before using them.
- Add null checks:
if (text != null) {
System.out.println(text.length());
}
There is a detail post on how to avoid NullPointerException. You can check that out.
2. ClassNotFoundException
Error Message:java.lang.ClassNotFoundException
Cause:
The JVM can’t find the specified class at runtime. Common in projects with missing dependencies or incorrect classpaths.
Fix:
- Ensure the class is in the correct package.
- Add missing JAR files to your project’s build path (e.g., in Eclipse: Right-click project > Build Path > Configure Build Path).
- For Maven/Gradle, update dependencies in
pom.xml
orbuild.gradle
.
3. NoClassDefFoundError
Error Message:java.lang.NoClassDefFoundError
Cause:
A class was present during compilation but missing at runtime.
Fix:
- Check if the JAR file containing the class is included in the runtime classpath.
- Rebuild the project to ensure all dependencies are bundled.
4. “Could not find or load main class”
Error Message:Error: Could not find or load main class MainClass
Cause:
- Incorrect class name specified in the
java
command. - Missing
Main-Class
attribute in the JAR manifest.
Fix:
- Run the class with the full package path:
java com.example.MainClass
- Rebuild the executable JAR with a valid manifest (see how to create executable JARs).
5. ArrayIndexOutOfBoundsException
Error Message:java.lang.ArrayIndexOutOfBoundsException
Cause:
Accessing an array index that doesn’t exist (e.g., index 5
in an array of size 5
).
Example:
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // Valid indices are 0-2
Fix:
- Loop safely using
array.length
:
for (int i = 0; i < numbers.length; i++) { ... }
6. UnsupportedClassVersionError
Error Message:java.lang.UnsupportedClassVersionError: Unsupported major.minor version 61.0
Cause:
The Java class was compiled with a newer JDK but is running on an older JRE.
Fix:
- Update the JRE to match the JDK version used for compilation.
- Recompile the class with an older target version:
javac -target 8 -source 8 MyClass.java
7. NoSuchMethodError
Error Message:java.lang.NoSuchMethodError
Cause:
A method is called that doesn’t exist in the loaded class version (common in dependency conflicts).
Fix:
- Check dependency versions in your build tool (Maven/Gradle).
- Run
mvn dependency:tree
to identify conflicting libraries.
8. OutOfMemoryError
Error Message:java.lang.OutOfMemoryError: Java heap space
Cause:
The application uses more memory than allocated to the JVM heap.
Fix:
- Increase heap size using JVM arguments:
java -Xmx2048m -Xms512m MyApp
- Optimize code to reduce memory leaks (e.g., avoid unnecessary object creation).
9. “Exception in thread main” (Generic Runtime Errors)
Example:Exception in thread "main" java.lang.ArithmeticException: / by zero
Fix:
- Add error handling with
try-catch
blocks:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero!");
}
10. “javac is not recognized” (Compilation Error)
Cause:
Java Development Kit (JDK) is not installed or not added to the system PATH.
Fix:
- Install the JDK from Oracle’s website.
- Add Java to the PATH variable:
- Windows: Go to System Properties > Environment Variables > Path > Add JDK bin path.
- Linux/macOS: Update
~/.bashrc
or~/.zshrc
withexport PATH=$PATH:/path/to/jdk/bin
.
Tips for Handling Common Errors in Java
Use specific exception classes
When we throw an exception, specify the most specific exception class that we can. This will give the caller of our method more information about what went wrong, and it will make it easier for them to handle the exception.
For example, if we are trying to read a file that does not exist, we would throw a FileNotFoundException
instead of a generic Exception
. This will let the caller know exactly what went wrong, and they can take appropriate action.
Example:
try {
File file = new File("myfile.txt");
Scanner scanner = new Scanner(file);
} catch (FileNotFoundException e) {
// Handle the exception.
System.out.println("File not found: " + e.getMessage());
}
Log exceptions
Even if we’re able to handle an exception gracefully, it’s still a good idea to log it. This will help us track down the source of the error and prevent it from happening again.
There are many different logging frameworks available for Java. We can use whichever one we prefer.
Example:
try {
File file = new File("myfile.txt");
Scanner scanner = new Scanner(file);
} catch (FileNotFoundException e) {
// Log the exception.
Logger logger = Logger.getLogger("myapp");
logger.error("File not found: " + e.getMessage());
}
Don’t swallow exceptions
If we’re not able to handle an exception, we should not just swallow it. Swallowing an exception means that we’re ignoring it. This can lead to problems later on. Instead, we can rethrow the exception so that the caller of our method can handle it.
Example:
try {
// This code might throw an exception.
} catch (Exception e) {
// Don't swallow the exception.
throw e;
}
Use finally blocks
Finally blocks are executed no matter what happens in the try block. This makes them a good place to clean up resources, such as files or database connections.
Example:
try {
// This code might throw an exception.
} finally {
// Close the file, even if an exception was thrown.
File file = new File("myfile.txt");
file.close();
}
Use try-with-resources
Try-with-resources is a new feature added in Java 7 that makes it easier to close resources. When we use try-with-resources, the resources are closed automatically at the end of the try block, even if an exception is thrown.
Example:
try (FileInputStream inputStream = new FileInputStream("myfile.txt")) {
// This code will not throw an exception if the file is closed.
}
By following these tips, we can handle common Java errors gracefully and prevent them from causing problems in our applications.
Troubleshooting Tips for Java Errors
- Read the Stack Trace: The error message often points to the exact line and class causing the issue.
- Google the Error: Developers worldwide have likely faced (and solved) the same problem.
- Use Debuggers: IDEs like Eclipse and IntelliJ have built-in debuggers to step through code.
- Check Dependencies: Mismatched library versions cause many runtime errors.
Additional Tips
- Use a consistent error handling style throughout our code. This will make it easier for us and other developers to understand yur code and handle errors.
- Use a logging framework to log exceptions. This will help us track down the source of errors and prevent them from happening again.
- Testing our code thoroughly to make sure that it handles errors gracefully.
Final Thoughts
Java errors are frustrating but solvable with systematic debugging. Bookmark this guide for quick fixes, and explore our tutorials on running JAR files and creating executable JARs to master Java deployment.
Still stuck? Drop a comment below, and we’ll help you troubleshoot!