Java - 从终端运行我的prog并获取以下错误消息(w / NoClassDefFoundError)

时间:2012-02-12 16:06:33

标签: java terminal noclassdeffounderror

  

可能重复:
  NoClassDefFoundError , Java

> java foo/boo/Prog
Exception in thread "main" java.lang.NoClassDefFoundError: foo/boo/Prog
Caused by: java.lang.ClassNotFoundException: foo.boo.Prog
        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:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: foo/boo/Prog.  Program will exit.

我真的迷路了。我有一个目录foo / boo /,我有Prog.class和其他一些点类文件。 foo是我运行命令的当前目录的子目录。我编译得很好,在我的foo / boo /目录中,我已经检查过以确保确实存在“Prog.class”以及我需要的所有其他点类文件。我的Prog类中有一个主要的方法,我很确定这个问题与我的源代码无关(当然可以)但因为我能够在eclipse中运行Prog,而不是从我的终端运行( ssh到另一台机器上)。

有人试图破译所有这些混乱可能意味着什么吗?我真的不明白。非常感谢你。

3 个答案:

答案 0 :(得分:2)

$ java -h
Usage: java [-options] class [args...]
           (to execute a class)

您正在尝试指定类文件的文件系统路径,但这是不可能的。您需要正确指定类路径,因此类可以通过类加载器找到。

类路径是一组路径,java类加载器在其中查找要加载的类。因此,在-cp参数之后指定正确的文件夹,它会没问题。

答案 1 :(得分:1)

从foo / boo / Prog之外开始,即当前目录是foo的父目录并以@ grtt1运行。

可运作的示例

suzan@nebulla:~/Test_Java_01$ ls
foo
suzan@nebulla:~/Test_Java_01$ ls foo
boo
suzan@nebulla:~/Test_Java_01$ ls foo/boo
Prog.class  Prog.java
suzan@nebulla:~/Test_Java_01$ cat foo/boo/Prog.java
package foo.boo;

public class Prog {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
suzan@nebulla:~/Test_Java_01$ java foo.boo.Prog
Hello world

答案 2 :(得分:1)

我可能会误解(并且没有足够的只是对问题发表评论),但是你是说你有一个Prog目录,里面有一个Prog.class?这不会成为foo.boo.Prog.Prog?