异常:Exception in thread "main" java.lang.NoClassDefFoundError: wrong name

21

我的文件目录:

project/src/m2mcom/entities/AutomatedTelnetClient.java
           /web/Simple.java           
           /org/apache/commons/net/telnet/TelnetClient.java 

Simple.java的源代码:

package m2mcom.web;
import m2mcom.entities.AutomatedTelnetClient;
import java.util.*;
import java.io.*;

public class Simple {
    public static void main(String [] args) {
        try {
            AutomatedTelnetClient telnet = new AutomatedTelnetClient();
            String answer = telnet.request();
            System.out.println(answer);
        } catch (Exception e) {
            System.err.println("Error");
        }
    }
}

当我执行Simple.class时,没有编译错误,但是却收到了以下错误信息:

C:\Users\Victor\Desktop\project2\src\m2mcom\web>java Simple
Exception in thread "main" java.lang.NoClassDefFoundError: Simple (wrong name: m
2mcom/web/Simple)

有人知道如何解决这个问题吗?


看一下这个链接,你就会明白为什么会出现那个错误以及如何在将来避免它:http://javarevisited.blogspot.co.uk/2011/06/noclassdeffounderror-exception-in.html - justMe
3个回答

36

您正在错误的文件夹中执行命令,使用了错误的类名。在运行Java类时,需要使用完全限定名(FQN)。当然,您必须在正确的目录中。在您的示例中,您的类的FQN是m2mcom.web.Simple(由m2mcom.web简单名称Simple组成)。

至于推断正确的目录,您的类存储在分层文件夹结构中,其基本上始于C:\ Users \ Victor \ Desktop \ project2 \ src

因此,为了正确执行程序,请从C:\ Users \ Victor \ Desktop \ project2 \ src 执行以下操作:

java m2mcom.web.Simple

在运行Java类时,您需要使用完全限定名称,而且您还在错误的文件夹中运行程序。 - Perception
非常感谢您这个清晰的回答,Perception! - user1511417

5
package m2mcom.web;

删除上面的行并重新编译它。 当您在NetBeans中运行代码时,它包含在一个m2mcom.web包中。这不在您的类文件中。


0

所以当你执行java命令时,必须在包名称的上一级目录中,命令应该是packagename.classname的形式,不带有.class后缀。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接