The “Could not find or load main class” error in Java occurs when the Java Virtual Machine (JVM) cannot locate or access the class containing the main
method. Here’s a detailed breakdown of causes and solutions:
Common Causes & Fixes
1. Incorrect Classpath
- Issue: The JVM doesn’t know where to find your compiled
.class
file. - Solution:
# Include the current directory (.) in the classpath
java -cp . YourClassName
- For packages:
# If your class is in package "com.example", run from the root directory:
java -cp . com.example.YourClassName
2. Wrong Class Name or File Structure
- Issue:
- Class name ≠ Filename (Java is case-sensitive).
- Incorrect package directory structure.
- Example:
- File:
MyClass.java
→ Class must bepublic class MyClass
. - Package:
com.example.MyClass
→ File must be incom/example/MyClass.java
.
- File:
3. Missing .class
File
- Issue: The class wasn’t compiled.
- Solution:
javac YourClassName.java # Compile first java YourClassName
4. Incorrect Command Syntax
- Mistakes:
- Using
.java
instead of the class name:
- Using
java MyClass.java ❌ Wrong java MyClass ✅ Correct
- Including the
.class
extension:
java MyClass.class ❌ Wrong java MyClass ✅ Correct
5. Environment Variable Issues
- Issue: A global
CLASSPATH
variable overrides your local settings. - Fix: Temporarily override it:
java -cp . YourClassName # Ignore the global CLASSPATH
Troubleshooting Steps
Step 1: Verify Compilation
javac YourClassName.java
ls YourClassName.class # Confirm .class file exists
Step 2: Check Package Structure
- If your class is in package
com.example
:
Project Root
└── com
└── example
└── YourClassName.class
- Run from the root directory:
java -cp . com.example.YourClassName
Step 3: Use Absolute Paths
java -cp /full/path/to/class/dir YourClassName
Examples
Case 1: Basic Class (No Package)
// File: HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
javac HelloWorld.java
java HelloWorld # Output: Hello!
Case 2: Class in a Package
// File: src/com/example/Main.java
package com.example;
public class Main {
public static void main(String[] args) {
System.out.println("From package!");
}
}
# Compile from the "src" directory:
javac -d ../bin src/com/example/Main.java
# Run from the project root:
java -cp bin com.example.Main # Output: From package!
Advanced Checks
- Check JAR files: If using a JAR, verify the manifest:
jar tf your.jar # List contents
- IDE-Specific Issues:
- In Eclipse/IntelliJ: Clean and rebuild the project.
- Ensure the output directory matches the run configuration.
Summary Table
Cause | Fix |
---|---|
Missing .class file | Compile with javac |
Incorrect package path | Run from root with java -cp . com.example.YourClassName |
Typo in class name | Match case and spelling (e.g., MyClass vs. myclass ) |
Classpath not set | Use -cp . to include the current directory |
By addressing these common issues systematically, you’ll resolve the error in most cases.