我有一个名为Main.java的Java程序,它位于以下目录中:

/home/user/program/Main.java

当我尝试从“程序”目录运行Main.java时,一切正常,我使用以下代码行:
/home/user/program$ java Main

但是当我尝试从主目录运行Main.java时:
/home$ java /home/user/program/Main

我得到:
Exception in thread "main" java.lang.NoClassDefFoundError: /home/user/program/Main
Caused by: java.lang.ClassNotFoundException: .home.user.program.Main

此错误的原因是什么?

最佳答案

这是由于您的类路径,它将默认为当前目录。当您从java Main运行/home/user/program时,它将在当前目录中找到该类(因为该软件包似乎未设置,这意味着它是默认值)。因此,它将在/home/user/program/Main.class中找到该类。

java /home/user/program/Main运行/home会尝试在类路径(当前目录)中查找该类,该类路径将在/home/home/user/program中查找,并期望找到文件Main.class,该文件包含带有Main包的.home.user.program类的定义。



您可以通过使用-cp-classpath指定类路径来解决此问题:

java -cp /home/user/program Main

关于java - 对Java中的NoClassDefFoundError进行故障排除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5376311/

10-11 22:23
查看更多