2009-09-18 103 views
3

我看了一些其他的SO问题,没有找到任何解决我的问题的东西......我有一个Main.java文件(下面)和一个没有关联源文件的OthelloLib.jar文件。运行Java程序

运行javac Main.java失败

Main.java:8: cannot find symbol 
symbol : class SimplePlayer 
location: class Main 
     OthelloPlayer p1 = new SimplePlayer(); 
和一些更多的错误。 SimplePlayer和BetterPlayer在jar中定义。我如何告诉java这个jar?此命令: javac -classpath .:OthelloLib.jar -g Main.java不会导致错误,但我仍然不知道如何运行该程序。如果我运行 java -classpath .:OthelloLib.jar Main,java的抱怨:

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

但TimeoutException.java是在同一个目录中Main.java。

我不知道在哪里查找这样的基本Java东西,所以我在这里!

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

'公共的Main(){}'是不必要的。并不是每个类都需要一个构造函数,并且因为它什么都不做,它只是混淆了你的代码。 – Imagist 2009-09-18 04:53:49

+0

几年前某个类的遗留代码。我很高兴java不需要那样。 :) – 2009-09-18 06:57:26

回答

3

您运行

javac -classpath .:OthelloLib.jar Main.java 

进行编译,然后

java -classpath .:OthelloLib.jar Main 

-classpath .:OthelloLib.jar选项告诉Java的每一种情况下在哪里可以找到SimplePlayer,你需要其他类;它不知道自己查看JAR文件。你确实需要告诉编译器和虚拟机在哪里寻找类。

编辑:看起来你添加一些有关TimeoutException因为我写这个...你还记得编译TimeoutException.java?并且是与Main.class相同的目录中的TimeoutException.class文件?

+0

我试过第二个命令... java抱怨另外一个问题......好像它发现埋在罐子里的类,不过。 – 2009-09-18 03:52:33

+0

啊。似乎我没有编译所有必要的文件。让我试试.... – 2009-09-18 03:55:35

+0

这是我在Eclipse中学习java所得到的结果。 – 2009-09-18 03:56:16

0

您是否在调用程序时指定了类路径?

类似以下可能的工作:

java -cp .:OthelloLib.jar Main 
2

注意:您可以做到这一切好的IDE像Eclipse或NetBeans的内库添加到您的项目。剩下的部分将自动处理。

2

您是否设置了对OthelloLib.jar的引用或调用带有该库的javacompiler作为参数?

java -classpath .:OthelloLib.jar -g Main 
1

您是否导入了所有库?

import a.b.c. OthelloPlayer;