如何使用命令行编译和运行Stanford的Karel?

时间:2012-08-27 21:46:29

标签: java command-line

这个程序在同一台机器上的eclipse中编译和运行,但我真的很想从命令行和我选择的编辑器中工作。

CollectNewspaperKarel.java

import stanford.karel.*;

    public class CollectNewspaperKarel extends SuperKarel {

        public void run() {
            // You fill in this part
        }

    }

karel.jar与上面的文件位于同一目录中。

编译

javac -cp karel.jar CollectNewspaperKarel.java

没有错误。

生成

java -cp karel.jar CollectNewspaperKarel

Exception in thread "main" java.lang.NoClassDefFoundError: CollectNewspaperKarel
Caused by: java.lang.ClassNotFoundException: CollectNewspaperKarel
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

2 个答案:

答案 0 :(得分:1)

在运行程序时,您忘记将类包含在classpath中。

试试这个 - 如果在Windows上运行:

java -cp karel.jar;CollectNewspaperKarel.class CollectNewspaperKarel

或者,如果你在linux上运行:

java -cp karel.jar:CollectNewspaperKarel.class CollectNewspaperKarel

然而,还有一件事,你需要在你的班级中使用main方法,否则它将不起作用:)

<强>更新

我找到了以下网站:http://ycsoftware.net/setting-up-karel-the-robot-in-eclipse/

看来,如果你有与作者相同版本的karel,你应该使用以下参数:

在Windows上

java -cp karel.jar;CollectNewspaperKarel.class stanford.karel.Karel code=CollectNewspaperKarel

在linux上:

java -cp karel.jar:CollectNewspaperKarel.class stanford.karel.Karel code=CollectNewspaperKarel

答案 1 :(得分:1)

Peter B.是对的,但是你无法单独运行一个包含“run”方法的类,你需要一个public static void(String [] args)方法来使它可以运行。

我认为在Eclipse中,其他一些类被用作运行该东西的“主类”。