Mac Terminal: Could not find or load main class CLASSNAME - java

I am trying to run a java program through the Terminal on Mac, yet getting:
Error: Could not find or load main class (MY CLASSNAME)
I compiled this application with Eclipse, and when I run this with Eclipse, it works fine.
Furthermore, I am in the right directory, as when I type "ls" in the Terminal, it lists all the files, includes the class file I am trying to run.
This is what I type:
java mainClass
I would very much appreciate help to solve this!
Thank you,
Dean
EDIT: Solution - instead of java mainClass, it must have package too: java startPackage.mainClass

Start by making sure you are at the directory above the top level package
If the class belongs to the package com.foo.bar, you want to be in the directory above com.
In your case, you want to be in the directory above startPack.
Then you need to use the fully qualified name to run the class...
java statPack.mainClass
For example...

Make sure you have the current directory inside your CLASSPATH.
java -cp . mainClass
To set this globally, you can use export CLASSPATH=$CLASSPATH:. inside .bash_profile.
Separately, if your class lives inside a package such as com.foo.bar, then you will need to go to the parent directory of com and run your application with the full path.
java com.foo.bar.mainClass

I too faced this on Mac machine and then what I had to do to make it work was:
Problem Statement:
I had one package xyz under the root of project i.e src/main/java and then inside xyz package I had one class Student.java
my current directory is /Users/username/projectname/src/main/java/xyz:
I can see Student.java exists here
and I compiled it using javac Student.java
Now I see class file has been created at this location. But when I try to run the class file using java Student
I get the error: Error: Could not find or load main class Student
Solution:
Now the solution is to go one step back in the directory and go to root path:/Users/username/projectname/src/main/java and run the command
java xyz.Student
and it will work.
Link to follow: https://javarevisited.blogspot.com/2015/04/error-could-not-find-or-load-main-class-helloworld-java.html

For people dumb like me, make sure you are typing java HelloWorld - and NOT java HelloWorld.class - to run the compiled file with the name HelloWorld.class. This is especially so if you are used to hitting the tab key to complete the file name, as the terminal will give you java HelloWorld.class if you hit the tab key for autocomplete after typing something like java He...
This answer is here because it took 3 sites, including this answer, and 25 mintues before I figured out what I was doing wrong.
Logic is easy, typing is hard.

Using the absolute path can also resolve this problem:
java -classpath /Users/xingliu/IdeaProjects/springproject/src/main/java/ startPackage.mainClass

Related

Could not find or load main class - for any program

I'm having a problem where the java command - no matter what I'm trying to run, says that it Could not find or load main class.
Everything is fine when compiling with javac, .class files are created. So when I run:
javac HelloWorld.java
on
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
everything compiles fine, a HelloWorld.class file is created along side the HelloWorld.java file. However when I then go to run:
java HelloWorld
1) the most telling sign is that when I press Tab to autofill HelloWorld nothing comes up.
2) when I do run it, I get the Error: Could not find or load main class HelloWorld despite it being in the same directory, not being part of a package, compiling fine with a .class file, the program having a main class.
For reference running Fedora 23 64bit, openjdk version "1.8.0_111".
Just a small reminder for the newbies in Java:
When compiling, you type:
javac MyClass.java
Now, you've got two files:
MyClass.class MyClass.java
Now, whereas you typed the .java extension when compiling, you must NOT type the extension .class when running the program. You should just type:
java MyClass
If you type java MyClass.class then you'll get:
Error: Could not find or load main class
Try using java -cp . HelloWorld
Some good reading: http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/
You need to specify classpath parameter while running your example:
java -cp . HelloWorld
java -cp HelloWorld
works. I use windows 10, and was checking out the very course. I first had to add it to path, and spent time wasted on it. Be sure, however, to NOT include the .class part of the name. Java is not my first language, but Java is portable and is a suitable language for everyone.
The same happened to me while compiling a piece of code (that was initially writen for an IDE with several files) throug terminal. The problem was mentioning the package with the same name of the main class (package HelloWorld). I fixed it and now it works. Not sure if that's your case
May be you have removed your JDK From System.
You can change it using following steps
1> Select Project
2> Right Click On Project
3> Click On Properties
4> Go to Java Build Path
5> Click On Libraries Option
6> Select JRE System Library
7> Click On Edit
8> Change Your Library Accordingly

How to compile and run project with multiple classes in package?

I just realized I'm about to graduate and I still don't know how to handle this situation:
Say I have a java package named mystuff.project1 and inside the package I have Project1.java (which has the main method) and ThingThatDoesStuff.java . Both are public classes, have the package declaration at the top of the file, etc. I can debug this project fine in Eclipse.
For maximum simplicity, I move the project to C:\ so the java files are located in c:\mystuff\project1
I navigate into c:\mystuff\project1 and type javac *.java to compile the class files
Now how the blazes do I run my application?
java Project1 doesn't work
java mystuff.project1.Project1 doesn't work
java -cp . Project1 doesn't work
java -cp . mystuff.project1.Project1 doesn't work
All of the above give me "Error: Could not find or load main class"
I've been searching SO and elsewhere to try to understand this problem but I'm completely baffled.
I've:
cleared my CLASSPATH variable
triple-checked PATH etc
successfully tried compiling and running standalone class files that aren't in a package
I understand this is a stupid newbie question but I just can't figure it out. I realized every other time I've run into this problem I similarly couldn't find a solution and put all of the classes into a single file. I'd rather learn how to stop doing that now.
I think you have to change to C:\ and then enter:
javac mystuff\project1\*.java
java mystuff\project1\Project1
and this should work.
It's either that or:
javac mystuff/project1/*.java
java mystuff/project1/Project1

Running a simple Java Program in Command Prompt error

I am trying to run my Example2.class program in windows 7 64-bit command prompt. I used command prompt already to compile the program, but when type: "java Example2" it gives me an error saying could not find or load main class example2. How do I set the right path to my file so that it can find it? Thanks
You need to give it the full package name, and (unless you change the class path) you need to be in the right directory. If the full package name is
com.something.Example2
then you'd expect the compiler to produce a file like this:
com/something/Example2.class
If you make sure you're in the directory immediately above com (i.e., you can see com when you do a directory listing), then you can run it with
java com.something.Example2
Note that it's case sensitive.
If you used the default package (i.e., the full class name really just is Example2) then you need to be in the directory containing Example2.class, and then you run
java Example2
But using the default package is discouraged.
The biggest thing you could do to help yourself out is to use an IDE (Eclipse or NetBeans are the most commonly used ones). As soon as you start to write anything at all large or complex, compiling and running from the command line without an IDE will cause you to claw your own eyes out.
When you write a class you can save the file as : MyClass.java and then execute this commands in this directory:
javac MyClass.java
which will compile the class and then create automatically the file: MyClass.class (If compilation ended without errors)
and then to run this SPECIFIC class execute the command:
java Myclass

Doesn't find my main class in a jar

I'm developing a program with three classes and also includes some external jar archives and classes. When I run it in Eclipse it works properly, but I need to try with some other programs, so I need to run it at the console. I save all of it in a folder, which contains another two folders, one with the .class created by me and the other one with the .java and .jar archives and a folder with the external classes. I've tried to creat a .jar archive containing this folder and the manifest, where I told where's the main class.
When I run it I receive "Exception in thread "main" java.lang.NoClassDefFoundError", so it doesn't found the class where the main is, but I don't know why. I've tried some different ways to define it at the manifest and changing the classpath and it still doesn't work.
Any solutions or advices?
Thanks!
Try to use JarSplice, it will let you define the main class.
NoClassDefFoundError means that the file existed during compile time, but it was not found during run time. Since there were no compilation issues, the jar was created, but at run time, while using command like java -jar jarfilename fullyqualifiedclassname it threw this exception. Check the classpath variable, validate that you are executing the command from the right folder location in command window.
I had always referred the below link for such errors and it worked for me
http://javaeesupportpatterns.blogspot.in/2012/06/javalangnoclassdeffounderror-how-to.html
when creating a project for example ABC the IDE normally Netbeans creates the source folder and creates the main class as ABC.java which contains the main class. In Netbeans IDE let you mention your main class if it is not ABC or if not you must create an instance of the class you want to run when application executes in ABC.java class.
In one of my projects I ran also in the same situation. The problem was always a missunderstanding of mine with this error message.
The reason in my case was that the computer could not found the declared jar file. The use of the parameter -cp let me became happy. So try
java -jar -cp ./Server.jar
Edit:
I forgot to mention that I had also to mention the full qulified name of class which contains the main class.
This:
The stacktrace is "Exception in thread "main" java.lang.NoClassDefFoundError: /bin/TextClient
looks to me like your Manifest is wrong. To correct it, you can use:
jar -uvfe Server.jar full.name.of.your.MainClass
Note: not the file/path name of some class file!
This will create a MANIFEST that tells that full.name.of.your.MainClass is your main class.
In addition, if your jar contains entries like:
bin/Foo.class
bin/...
you created the JAR file probably from the wrong place (unless your TLD is bin).
If your main class is named org.adepts.Main, then a top level entry should be:
org/adepts/Main.class
(This is where it will be searched.)
I finally solved it by using the Eclipse "Export" option and not creating it manually.

Why Java could not find the main class?

I have just copied Key-Listener code from http://java.sun.com/docs/books/tutorial/uiswing/examples/events/KeyEventDemoProject/src/events/KeyEventDemo.java. I was able to compalie it with the "javac" command. But when I try to execute the compiled code (typing "java KeyEventDemo") I have a large message in the end of which I see:
Could not find the main class: KeyEventDemo. Program will exit.
Yesterday I had a similar problem on Windows Vista (now I am on Ubuntu). In the Windows I was able to solve the problem by typing "java -cp . ProgramName" or alternatively by adding new values ("." and "..")to the environment variable "classpath".
On Ubuntu the first solution does not work. I mean, when I type "java -cp . KeyEventDemo" I still have the problem. Moreover, on Ubuntu I was able to run other programs just typing "java ProgramName".
So, can anybody tell me what is special about this KeyEventDemo? Why it does not wont to work and how it can be solved?
The class KeyEventDemo is in a package events To run it, you must be in the parent folder of the events folder that contains the class, and run it using its fully qualified name, including the package:
java events.KeyEventDemo
The classpath must contain the folder (or JAR) that's the root of the folder hierarchy that represents the packages; the current folder is (I believe) included automatically.
This program is not in the default package, but in the package "events": use java -cp . events.KeyEventDemo from the directory containing the folder "events":
+work
+events
-KeyEventDemo.class
It is because the KeyEvent class is in package events.
You either have to remove the package events; line from source code, or compile it with:
javac -d . KeyEventDemo.java
Perhaps you compile and run with diferent java version.
This is common when you try to execute an example at eclipse.

Categories