Robert Karl
Robert Karl

Reputation: 7826

Running a Java Program

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();
  }
}

Upvotes: 3

Views: 417

Answers (5)

Winston Chen
Winston Chen

Reputation: 6879

Did you import all the libraries?

like

import a.b.c. OthelloPlayer;

Upvotes: 1

Dale
Dale

Reputation: 13044

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

java -classpath .:OthelloLib.jar -g Main

Upvotes: 2

Stefan Kendall
Stefan Kendall

Reputation: 67892

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.

Upvotes: 2

pythonquick
pythonquick

Reputation: 10869

Did you specify the classpath when you call your program?

Something like the following might work:

java -cp .:OthelloLib.jar Main

Upvotes: 0

David Z
David Z

Reputation: 131780

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?

Upvotes: 3

Related Questions