Ошибка Java - NoClassDefFoundError при запуске программы Java из командной строки

Команда,

Я поражен с основной ошибкой в ​​течение довольно долгого времени. Может кто-нибудь точно указать, что мне здесь не хватает.

Создана простая Java-программа (которая будет подключаться к сокету и отправлять сообщение). Код, указанный ниже

package client.sever.socket.example;

import java.io.*;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.*;

/**
 *
 * @author prem
 */
public class Clientprog {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        /** Define a host server */
                String host = "localhost";
    /** Define a port */
                int port = 19997;

    StringBuffer instr = new StringBuffer();
    String TimeStamp;
    System.out.println("SocketClient initialized");

    try {
      /** Obtain an address object of the server */
      InetAddress address = InetAddress.getByName(host);
      /** Establish a socket connection */
      Socket connection = new Socket(address, port);
      /** Instantiate a BufferedOutputStream object */

       BufferedOutputStream bos = new BufferedOutputStream(connection.
          getOutputStream());

      /** Instantiate an OutputStreamWriter object with the optional character
       * encoding.
       */
      OutputStreamWriter osw = new OutputStreamWriter(bos, "US-ASCII");

      TimeStamp = new java.util.Date().toString();
      /*String process = "Calling the Socket Server on "+ host + " port " + port +
          " at " + TimeStamp +  (char) 13;*/
      String process = "01234"+  (char) 13;

      /** Write across the socket connection and flush the buffer */
      osw.write(process);
      osw.flush();

      /** Instantiate a BufferedInputStream object for reading
      /** Instantiate a BufferedInputStream object for reading
       * incoming socket streams.
       */

      BufferedInputStream bis = new BufferedInputStream(connection.
          getInputStream());
      /**Instantiate an InputStreamReader with the optional
       * character encoding.
       */

      InputStreamReader isr = new InputStreamReader(bis, "US-ASCII");

      /**Read the socket's InputStream and append to a StringBuffer */
      int c,d=0;
      try
      {
          if(isr.ready())
          {
          }
          else
              System.out.println("NO RESPONSE");
      while (( (c = isr.read()) != 13) && d<4)
      {
        instr.append( (char) c);
        System.out.println("Inside Loop - "+instr);
        d++;
      }}
      catch(OutOfMemoryError e)
      {
          System.out.println("OOM ERROR - "+e);
          System.out.println(instr);
      }
      /** Close the socket connection. */
      connection.close();
      System.out.println(instr);

    }
    catch(UnknownHostException e)
    {
     System.out.println("Unknown Host Exception: " + e);
    }
    catch(ConnectException e)
    {
     System.out.println("ConnectException: " + e);
    }
    catch(Exception e1)
    {
     System.out.println("Exception: " + e1);
    }
    }
}

Компиляция и запуск с IDE - Успешно.

Если попытаться с помощью командной строки, она завершится с ошибкой ниже.

Exception in thread "main" java.lang.NoClassDefFoundError: Clientprog
Caused by: java.lang.ClassNotFoundException: Clientprog
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: Clientprog.  Program will exit.

Пробовал также устанавливать classpath. Файл.class также находится по тому же пути, что и файл.java.

Шаги, выполняемые в командной строке ниже для справки.

Шаг 1

C: \ Users \ prem \ Documents \ NetBeansProjects \ Пример сокета Client Sever \src\ ent\sever\socket\example>set Path="C:\Program Files\Java\jdk1.6.0_32\bin"

Шаг 2 C: \ Users \ prem \ Documents \ NetBeansProjects \ Пример сокета клиента сервера \src\ ent\sever\socket\example>set HomePath="C:\Program Files\Java\jdk1.6.0_32"

Шаг 3

C: \ Users \ pre00185 \ Documents \ NetBeansProjects \ Пример сокета клиента сервера \ src \ ent \ sever \ socket \ example>javac Clientprog.java

Шаг 4 C: \ Users \ pre00185 \ Documents \ NetBeansProjects \ Пример сокета клиента сервера \ src \ ent \ sever \ socket \ example>java Clientprog

Исключение в потоке "main" java.lang.NoClassDefFoundError: Clientprog Причины: java.lang.ClassNotFoundException: Clientprog на java.net.URLClassLoader$1.run(URLClassLoader.java:202) на java.security.AccessControlile.NP) в java.net.URLClassLoader.findClass(URLClassLoader.java:190) в java.lang.ClassLoader.loadClass(ClassLoader.java:306) в sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) в Java.lang.ClassLoader.loadClass(ClassLoader.java:247) Не удалось найти основной класс: Clientprog. Программа будет закрыта.

1 ответ

Вам нужно указать classpath при запуске команды java, а также сослаться на ваш класс с его полным именем класса.

SET CP="C:\Users\pre00185\Documents\NetBeansProjects\Client Sever Socket Example\src"
java -cp %CP% client.sever.socket.example.Clientprog

Это предполагает, что ваш файл класса находится в том же месте, что и ваш источник. Отрегулируйте это по мере необходимости.

Другие вопросы по тегам