> 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到另一台机器上)。
有人试图破译所有这些混乱可能意味着什么吗?我真的不明白。非常感谢你。
答案 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?