我有一个名为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/