running a java program in a unix terminal - java

I have a java program with multiple class files and they are all stored in the same folder called lab7. I coded the project in NetBeans so used "package lab7" in all the files. My main application java file is called lab7.java. Now, when i try to run this on the terminal i get "Exception in main thread: NoClassDefFoundError". I do the following inside the folder lab7.
javac *.java
java lab7
I don't know why get this error. It should be some basic class path error. Thanks for the help.

Normally class names should start with a capital letter. So you should rename your main class to Main. If it's inside the lab7 package, run this:
java lab7.Main
This should be run in the directory that contains the lab7 directory. So if you're in the lab7 directory itself, go up one level first.

Use
java lab7.lab7
You do have a lab7.java file with a public static void main(String[]) method, right?

Related

Cannot use class from another directory into main java program

I am trying to use a java class hello in my main program test10. test10 is inside the folder "java" while class hello is in the folder "java1". Both these folders are at same level inside Documents folder. When I try to run the test10 file using the command below (inside java folder):
java -cp ../java1/ test10
It gives NoClassDefFoundError of class hello (I've used ".." so that it goes one level up to find java1). I can't find the way to set the classpath so that I can run the program. Please help!

Running Java Program from Folder Mac with Terminal

So I'm used to creating a single Java file and putting it into the desktop and running it from the terminal on mac (cd Desktop/, javac HelloWorld.java, java HelloWorld). Now I have a program that has multiple classes. My question is how to run a program from a folder. I have around 5 .java files in my folder and I need to run the one with the main class.
Writing multiple classes in single file or writing them in different .java files changes nothing. Finally, you have no. of .class files equal to no. of classes you have defined in your .java files.
The JVM checks for the public static void main(String[] args) in your class file to run the program(BTW you can also overload it but the above one is what is called first). You can also write main() method in every class. I believe that's why you use class name to run the program like java HelloWorld.
You should just use the name of the entry point class instead of HelloWorld, other classes will be compiled and used automatically.
The entry point class is the one that contains method
public static void main(String[] args)

Importing Classes from another package

Hello so I'm trying to Import a class from another project I made but I cant get it to work..
this is my code:
import program.GUI;
public class name {
//code
}
I get the following error
Opens the new class wizard to create the type.
package: program
public class GUI {
}
I have created a prog02>src>program>GUI.java
How can I solve it.
I think I see the problem here...
I don't know if your running java from cmd, but my explanation is going to assume you are. Outside of using IDEs like Netbeans and Eclipse that pretty much streamline the build process of java code, it's good to know how it works.
Ok, here goes:
1) Compile your java source code files into bytecode (.class files) by invoking JAVAC
javac [optional flags] [path to file intended for compilation]
This creates the bytecode that the JVM will need in order to execute.
2) Invoke the Java interpreter (JVM) to run your bytecode.
java [optional flags] [name of class file w/o .class extension]
If everything goes right this command will create a JVM process with main.java being the main entry to the program that creates the initial thread that runs your program.
Here what you should write to get you program to compile with you package dependencies.
cd to base dir that contains program with main method (src)
javac -cp . program/ (check by going to dir to see if a GUI.class file
was generated)
javac -cp . Main
java -cp . Main
That should do it. Otherwise from and IDE standpoint you either don't have file in the right directory or you are not using the right syntax for specifying your package and import.
The package declaration on the GUI class is not right. It should be:
package program;
public class GUI {
}
You may also find this useful: Java Code Conventions

Running Java builds with packages defined from Eclipse

I am fairly new to Java and wrote simple a program to strip unwanted contents from a CSV export.
The top of the program looks like this:
package csv;
import java.io.*;
import java.util.*;
public class csvstrip {
public static void main(String[] args) throws Exception {
Eclipse automatically builds the csvstrip.class in a folder {workspace}\bin\csv. However, whatever I type into command line (running it using the java command), I get the following:
Error: Could not find or load main class csvstrip
If I remove the package declaration from the code, Eclipse asks if you wish to move the csvstrip class to the default package and builds the the class a level up in the folder {workspace}\bin. Now, on entering
java csvstrip
the program functions fine. Before removing the package csv declaration, I tried:
java csv.csvstrip
java csvstrip
from both the bin and bin\csv folder but nothing seemed to run. What piece of information am I missing here? If you define a package for your code, from where in command line are you supposed to run the java command and how should your program be referenced?
I presume that you are trying to run the class file from top level or default package folder.
java will obviously throw you 'Class Not Found' error, because you are looking in the wrong directory.
trying running.
java .\csv\csvstrip
in the assumption that you are in the present working directory which contains csv folder within which you have csvstrip or try giving the complete path.
In your configuration you should be able to start your class standing in the bin folder and typing
java csv.csvstrip
...or...
java csv/csvstrip
should also work just fine
If you are on a windows machine please double check the case of your class file and of your package folder. Windows is case insensitive java classloader isn't.

Mac Terminal: Could not find or load main class CLASSNAME

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

Categories