NoClassDefFound при запуске из cmd, но не Eclipse - PullRequest
0 голосов
/ 16 декабря 2011

Я знаю, что почувствую себя отсталым, когда пойму это.Я пытаюсь сделать очень простой клиент / сервер и запустить его из командной строки.Он отлично работает из Eclipse, но не из cmd.Вот клиент:

package com.mycompany.pdr.client;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleClientSend {
public static void main(String[] args) {


    String host = "127.0.0.1";
    int port = 11048;
    String dataToSend = "HELLO SERVER";

    System.out.println("> Trying to connect...");
    System.out.println("> Opening connection to server [" + host + ":"
            + port + "]...");

    Socket socket1Connection;
    try {
        socket1Connection = new Socket(host, port);
        System.out.println("> Connected...");
        System.out.println("> Trying to write data... [ " + dataToSend + " ]");
        BufferedOutputStream bos = new BufferedOutputStream(
                socket1Connection.getOutputStream());
        /*
         * Instantiate an OutputStreamWriter object with the optional
         * character encoding. e.g. UTF-8
         */
        OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");

        // Writing to server
        osw.write(dataToSend);
        osw.flush();

        System.out.println("> Writing to server done...");

        socket1Connection.close();

    } catch (UnknownHostException e) {
        System.out.println(e.getLocalizedMessage());
        System.out.println("Unknown Host. Please check if the server is running at the IP & port");
        //e.printStackTrace();
    } catch (IOException e) {
        System.out.println(e.getLocalizedMessage());
        System.out.println("Could not send data. Giving up.");
        //e.printStackTrace();
    }

    System.out.println("> End of connection...");
}

}

Моя структура каталогов: (MyWorkspace)/myProject/com/mycompany/pdr/client Я запускаю javac SimpleClientSend.java из папки клиента, и я получаю файл класса, без ошибок.Я запускаю java SimpleClientSend и получаю сообщение NoClassDefFound:

Exception in thread "main" java.lang.NoClassDefFoundError:  SimpleClientSend (wrong name: com/iai/pdr/client/SimpleClientSend)

Я пытался использовать -cp ., когда запускаю Java, чтобы следовать рекомендациям любой другой статьи (но какой смысл, если.уже в моем classpath?), я попытался запустить его из-за пределов клиентской папки, все просто дает мне ту же ошибку.В Eclipse все, что мне нужно было сделать, это вставить файлы Java в пустой проект, и он запустился.Что я тут не так делаю?

1 Ответ

3 голосов
/ 16 декабря 2011

Вам необходимо указать полное имя вашего класса (включая пакет).

java com.mycompany.pdr.client.SimpleClientSend

Важно, чтобы основа структуры вашего класса была включена в ваш путь к классу. Обычно . включен, поэтому если вы запускаете команду выше, когда вы находитесь в myProject, она должна работать.

Если вы находитесь в другой папке, вы должны добавить myProject в ваш путь к классам, например:

java -cp ... MyWorkspace / myProject com.mycompany.pdr.client.SimpleClientSend

... конечно, поскольку я не знаю ваш полный путь.

...