Исключение в потоке "main" java.lang.NoClassDefFoundError: неправильное имя
Мой каталог файлов:
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)
Кто-нибудь знает, как это решить?
Ответы
Ответ 1
Вы выполняете команду в неправильной папке с неправильным именем класса. При запуске Java-класса необходимо использовать полное имя (FQN). И, конечно же, вы должны быть в правильном каталоге. В вашем примере FQN вашего класса - m2mcom.web.Simple(сочетание пакета m2mcom.web
и простого name Simple
).
Что касается вывода правильного каталога, ваши классы хранятся в иерархической структуре папок, которая в основном начинается с C:\Users\Victor\Desktop\project2\src
.
Итак, чтобы правильно выполнить вашу программу, от C:\Users\Victor\Desktop\project2\src
, do;
java m2mcom.web.Simple
Ответ 2
package m2mcom.web;
удалить выше строки и перекомпилировать ее.
когда вы запускаете свой код в netbeans, в том числе в пакете m2mcom.web. Это не в вашем файле класса.
Ответ 3
Таким образом, вы должны находиться в каталоге прямо над именем пакета при выполнении команды java, которая должна быть в виде packageagename.classname без суффикса .class.