34

I am running a simple "HelloWorld" Program. I get this error in the command prompt:

Could not find or load main class HelloWorld.

I have set the CLASSPATH and PATH variable in the system. In the cmd prompt, I am running from the directory where I have saved HelloWorld program. I can see the class name and the file name are same and also .class file created in the same directory. What else could be the problem?

My sample program looks like this:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}
kenorb
  • 155,785
  • 88
  • 678
  • 743
user241702
  • 561
  • 1
  • 4
  • 6
  • How are you running the program ? – Kakarot May 07 '14 at 23:29
  • Please provide the operating system you are using and command line that you are using to attempt to run the program. – ErstwhileIII May 07 '14 at 23:49
  • File HelloWorld.class must be in the directory org/tij/exercises. Then you can run the example with java -cp . org.tij.exercises.HelloWorld – Andrea Luciano May 07 '14 at 23:58
  • I am running on windows 7 using jdk 1.8.. – user241702 May 08 '14 at 00:03
  • Command prompt looks like this... C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>javac HelloWorld.java C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld Error: Could not find or load main class HelloWorld – user241702 May 08 '14 at 00:08
  • HelloWorld.class is in the same directory. I tried to run using java -cp . org.tij.exercises.HelloWorld. But i got the same error.."Could not find or load main class org.tij.exercises.HelloWorld – user241702 May 08 '14 at 00:15
  • http://stackoverflow.com/a/42638989/1875434 – abbas Mar 07 '17 at 02:18

15 Answers15

39

When the Main class is inside a package then you need to run it as follows :

java <packageName>.<MainClassName>

In your case you should run the program as follows :

java org.tij.exercises.HelloWorld 
Kakarot
  • 4,252
  • 2
  • 16
  • 18
  • 9
    I tried using the java org.tij.exercises.HelloWorld, I am still getting the same error. No luck!! – user241702 May 07 '14 at 23:50
  • 4
    What worked for me was running the program as `java org.tij.exercises.HelloWorld` from **`target/classes`** dir. At first I tried to run it directly from `target/classes/org/tij/exercises` which didn't work. – radoh Nov 30 '16 at 11:31
  • I spent hours on this issue. . .thanks!!! – MDGREEE Mar 02 '23 at 16:14
18

What's your CLASSPATH value?

It may look like this:

 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

I guess your value does not contain this .;.

So, ADD IT .
When you done , restart CMD

That may works.


For example the file HelloWorld.java is in path: D:\myjavatest\org\yz\test and its package is: org.yz.test.

Now, you're in path D:\myjavatest\ on the CMD line.
Type this to compile it:

javac org/yz/test/HelloWorld.java

Then, type this to run it:

java org.yz.test.HelloWorld

You may get what you want.

kenorb
  • 155,785
  • 88
  • 678
  • 743
youngzy
  • 397
  • 2
  • 13
12

I removed bin from the CLASSPATH. I found out that I was executing the java command from the directory where the HelloWorld.java is located, i.e.:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>java HelloWorld

So I moved back to the main directory and executed:

java org.tij.exercises.HelloWorld

and it worked, i.e.:

C:\Users\xyz\Documents\Java\javastudy\src>java org.tij.exercises.HelloWorld

Hello World!!

honk
  • 9,137
  • 11
  • 75
  • 83
user241702
  • 561
  • 1
  • 4
  • 6
4

Since you're running it from command prompt, you need to make sure your classpath is correct. If you set it already, you need to restart your terminal to re-load your system variables.

If -classpath and -cp are not used and CLASSPATH is not set, the current directory is used (.), however when running .class files, you need to be in the folder which consist Java package name folders.

So having the .class file in ./target/classes/com/foo/app/App.class, you've the following possibilities:

java -cp target/classes com.foo.app.App
CLASSPATH=target/classes java com.foo.app.App
cd target/classes && java com.foo.app.App

You can check your classpath, by printing CLASSPATH variable:

  • Linux: echo $CLASSPATH
  • Windows: echo %CLASSPATH%

which has entries separated by :.

See also: How do I run Java .class files?

Community
  • 1
  • 1
kenorb
  • 155,785
  • 88
  • 678
  • 743
3

One reason for this error might be

Could not find or load main class <class name>

Maybe you use your class name as different name and save the class name with another name you can save a java source file name by another name than class name. For example:

class A{
    public static void main(String args[]) {
        System.out.println("Hello world");
    }
}

you can save as Hello.java but,

To Compile : javac Hello.java

This will auto generate A.class file at same location.

Now To Run        : java A

Arun
  • 173
  • 1
  • 5
Adnan
  • 31
  • 2
3

I had the same problem, mine was a little different though I did not have a package name. My problem was the Class Path for example:

C:\Java Example>java -cp . HelloWorld 

The -cp option for Java and from what I can tell from my experience (not much) but I encountered the error about 20 times trying different methods and until I declared the class Path I was receiving the same error. Vishrant was correct in stating that . represents current directory.

If you need more information about the java options enter java -? or java -help I think the options are not optional.

I just did some more research I found a website that goes into detail about CLASSPATH. The CLASSPATH must be set as an environment variable; to the current directory <.>. You can set it from the command line in windows:

// Set CLASSPATH to the current directory '.'
prompt> set CLASSPATH=.

When you add a new environment setting you need to reboot before enabling the variable. But from the command prompt you can set it. It also can be set like I mentioned at the beginning. For more info, and if your using a different OS, check: Environment Variables.

kenorb
  • 155,785
  • 88
  • 678
  • 743
outlooker
  • 146
  • 2
  • 4
2

Execute your Java program using java -d . HelloWorld command.

This command works when you have declared package.

. represent current directory/.

Vishrant
  • 15,456
  • 11
  • 71
  • 120
  • 1
    I see the below error if I execute using the "javac -d . HelloWorld" command. C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>javac -d . HelloWorld error: Class names, 'HelloWorld', are only accepted if annotation processing is explicitly requested 1 error – user241702 May 09 '14 at 23:05
  • Yep, this is wrong. `javac` means java compile, and compiler accepts *.java files, i.e. there should be `HelloWorld.java`. When class is compiled, you should call `java` command, which executes the generated (binary) file. – mrek Sep 28 '15 at 18:45
2

I had a similar problem when running java on win10

instead of

$ java ./hello
Error: Could not find or load main class ..hello

Run

$ java hello
Hello, World
pev.hall
  • 467
  • 4
  • 8
2

I was getting the exact same error for forgetting to remove the .class extension when running the JAVA class. So instead of this:

java myClass.class

One should do this:

java myClass
Darush
  • 11,403
  • 9
  • 62
  • 60
1

I used IntelliJ to create my .jar, which included some unpacked jars from my libraries. One of these other jars had some signed stuff in the MANIFEST which prevented the .jar from being loaded. No warnings, or anything, just didn't work. Could not find or load main class

Removing the unpacked jar which contained the manifest fixed it.

Sam Barnum
  • 10,559
  • 3
  • 54
  • 60
0

I faced the same problem and tried everything mentioned here. The thing was I didn't refresh my project in eclipse after class creation . And once I refreshed it things worked as expected.

decoder
  • 137
  • 3
  • 12
0

faced the same problem. solved by following these steps

  • go to directory containing the package 'org.tij.exercises' (e.g: in eclipse it may be your src folder)
  • use java org.tij.exercises.HelloWorld
Maria
  • 123
  • 8
0

For a lot of us, at least for me, I think the class path hierarchy is not intuitive since I'm working inside a directory structure and it feels like that ought to be it.

Java is looking at the name of the class based on it's package path, not just the file path.

It doesn't matter if: i'm in the local directory ./packagefoo/MainClass, or a directory up ./packagefoo/, or one down ./packagefoo/MainClass/foo.

The command "java packagefoo.MainClass" is running off the root %CLASSPATH% which means something significant to Java. Then from there it traverses package names, not path names like us lay coders would expect.

So if my CLASSPATH is set to %CWD%/, then "java packagefoo.MainClass" will work. If I set the CLASSPATH to %CWD%/packagefoo/ then packagefoo.MainClass can't be found. Always "java MainClass" means nothing, if it is a member of "package", until I rip out the java code "package packagefoo;" and move the Class File up a directory.

In fact if I change "package packagefoo;" to "package foopackage;" I have to create a subfolder under CLASSPATH/foopackage or foopackage.MainClass stops working again.

To make matters worse, Between PATH, CLASSPATH, JAVAHOME, for Windows, JDeveloper, Oracle Database, and every user name it was installed under, I think a coder trying to just get something up fast ends up brute forcing path variables and structure until something works without understanding what it means.

at least i did.

phydroxide
  • 29
  • 4
0

Create a folder org/tij/exercises and then move HelloWorld.java file. Then run below command

javac -cp . org/tij/exercises/HelloWorld.java

AND

java -cp . org/tij/exercises/HelloWorld
Ashwin Shetty
  • 41
  • 1
  • 1
  • 6
0

I was facing similar issue but it was due to space character in my file directory where I kept my java class.

Scenario given below along with solution:

   public class Sample{
      public static void main(String[] args) {
        System.out.println("Hello world, Java");
      }
}
  • My Sample.java class was kept at Dir "D:\Java Programs\Sample.java"[NOTE: Package statement not present in java class].
  • In command prompt, changed directory to "D:\Java Programs\", my programmed compiled but failed to run with error "Could not find or load main class"
  • After all the possible solutions over SOF(nothing worked), I realized may b space causing me this issue.
  • Surprisingly removal of folder name space char['Java Programs' -> 'JavaPrograms'], my program executed successfully.

    Hope it helps
user3181500
  • 401
  • 1
  • 5
  • 12