Tutorial :Running a Java Program



Question:

I looked at some other SO questions, didn't find anything that solved my problem... I have a Main.java file (below) and a OthelloLib.jar file without associated source files.

Running javac Main.java fails with

Main.java:8: cannot find symbol  symbol  : class SimplePlayer  location: class Main          OthelloPlayer p1 = new SimplePlayer();  
and a few more errors. SimplePlayer and BetterPlayer are defined in the jar. How do I tell java about this jar? This command: javac -classpath .:OthelloLib.jar -g Main.java doesn't cause an error, but I still don't know how to run the program. If I run java -classpath .:OthelloLib.jar Main, java complains:

Exception in thread "main" java.lang.NoClassDefFoundError: TimeoutException

but TimeoutException.java is in the same directory as Main.java.

I don't know where to look up basic Java stuff like this, so here I am!

public class Main {    public Main() { }    public static void main(String[] args) {      OthelloPlayer p1 = new SimplePlayer();      OthelloPlayer p2 = new BetterPlayer();      OthelloObserver o = new OthelloSimObserver();        // Create an untimed game      OthelloGame g = new OthelloGame(p1, p2, o);      System.out.println("Starting game");      g.run();    }  }  


Solution:1

You run

javac -classpath .:OthelloLib.jar Main.java  

to compile, then

java -classpath .:OthelloLib.jar Main  

In each case the -classpath .:OthelloLib.jar option tells Java where to find SimplePlayer and other classes you need; it doesn't know to look in the JAR file on its own. And you do need to tell both the compiler and the virtual machine where to look for the classes.

EDIT: Looks like you added something about TimeoutException since I wrote this... did you remember to compile TimeoutException.java? And is the TimeoutException.class file in the same directory as Main.class?


Solution:2

Note: You can do all this within a good IDE like eclipse or netbeans by adding the library to your project. The rest gets handled automagically.


Solution:3

Have you set a reference to OthelloLib.jar or invoking the javacompiler with the library as a parameter?

java -classpath .:OthelloLib.jar -g Main  


Solution:4

Did you import all the libraries?

like

import a.b.c. OthelloPlayer;  


Solution:5

Did you specify the classpath when you call your program?

Something like the following might work:

java -cp .:OthelloLib.jar Main  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »