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)

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

4

3 回答 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
于 2013-01-25T11:26:51.167 回答
5
package m2mcom.web;

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

于 2013-11-27T06:10:09.373 回答
0

因此,当您执行 java 命令时,您必须位于包名正上方的目录中,该命令的格式应为 packagename.classname,不带 .class 后缀。

于 2014-02-07T14:43:57.597 回答