Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这种情况下如何解释NoClassDefFoundError?_Java_Javac_Noclassdeffounderror - Fatal编程技术网

Java 在这种情况下如何解释NoClassDefFoundError?

Java 在这种情况下如何解释NoClassDefFoundError?,java,javac,noclassdeffounderror,Java,Javac,Noclassdeffounderror,我对Java非常陌生,只想从命令行运行javac和Java 我当前的目录内容是: hmank ~/c/J/naive » ls HelloWorld.class HelloWorld.java HelloWorld.java中的代码是: 我知道我应该先运行javac-d。然后运行java com.imshuai.javalinux.HelloWorld 但是,我想看看如果我直接运行javac HelloWorld.java和javahelloworld会发生什么 结果是javac可以编译He

我对Java非常陌生,只想从命令行运行javac和Java

我当前的目录内容是:

hmank ~/c/J/naive » ls
HelloWorld.class  HelloWorld.java
HelloWorld.java中的代码是:

我知道我应该先运行javac-d。然后运行java com.imshuai.javalinux.HelloWorld

但是,我想看看如果我直接运行javac HelloWorld.java和javahelloworld会发生什么

结果是javac可以编译HelloWorld.java,但运行java HelloWorld时,我得到错误:

java.lang.NoClassDefFoundError: com/imshuai/javalinux/HelloWorld (wrong name: HelloWorld)
我被NoClassDefFoundError搞糊涂了,因为我在当前目录中定义了HelloWorld。jvm必须找到HelloWorld.class并将其加载,否则jvm无法获得关于com/imshuai/javalinux/HelloWorld的任何信息

事实上,如果我

javac -d . HelloWorld.java
java HelloWorld
尽管HelloWorld.class在正确和错误的位置,我还是得到了相同的NoClassDefFoundError

在我看来,在上述错误的情况下,jvm应该报告一个类位置不匹配的包错误,因为jvm找到了类,并且没有一个正确的位置来放置HelloWorld.class,从而使java HelloWorld成功运行


此外,您能否告诉我为什么jvm决定报告java.lang.NoClassDefFoundError,以及错误名称的含义是什么:HelloWorld?

问题在于包组织,因为您指定的是包com.imshuai.javalinux,但缺少正确的文件夹结构

您应该根据包声明在文件夹中排列类

d。在javac中,命令使其工作,因为它创建包的文件夹结构,而不是将所有.class文件放在根目录中

因此,如果您运行javacom/imshuai/javalinux/helloworld,那么输出是Hello,World!而且这个程序是有效的


另一个解决方案是将该文件夹添加到java类路径。

试试java-cp。HelloWorldError:无法找到或加载主类HelloWorld,原因是:java.lang.NoClassDefFoundError:com/imshuai/javalinux/HelloWorld错误名称:HelloWorld。这意味着您提供了一个错误的类名HelloWorld,jvm需要的是com/imshuai/javalinux/HelloWorld。因此不会加载错误的名称HelloWorld。
javac -d . HelloWorld.java
java HelloWorld