2012-07-19 3 views
3

Просто возник вопрос о нечетной ошибке выполнения, которую я имею. Я работаю с сервером JSON, который отвечает на объект JSON при запросе внешнего источника. На данный момент, однако, я просто пытаюсь запустить объект JSON и запустить его перед отправкой. Мой код компилируется без указания пути к классам, но когда дело доходит до времени выполнения, он бросает NoClassDefFoundError, как показано здесь:Java runtime ClassNotFoundException

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
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) 
at ExampleServer.sendData(ExampleServer.java:76) 
at ExampleServer.runServer(ExampleServer.java:30) 
at ExampleServer.main(ExampleServer.java:15) 
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException 
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) 
... 15 more 

Мой код следует здесь:

import java.io.*; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.lang.*; 
import net.sf.json.*; 

public class ExampleServer{ 

private DataOutputStream output; 
private DataInputStream input; 
private ServerSocket server; 
private Socket connection; 

public static void main(String[] args){ 
    new ExampleServer().runServer(); 
} 

public void ExampleServer(){ 
    System.out.println("Server object created"); 
} 

public void runServer(){ 
    try{ 
     server = new ServerSocket(12345,100); 
     while(true){ 
      try{ 
       waitForConnection(); 
       getStreams(); 
       processConnection(); 
       sendData("Text"); 
      } catch(Exception e){ 
       System.out.println("Server Terminated Exception."); 
      } finally { 
       closeConnection(); 
      } 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

private void waitForConnection(){ 
    try{ 
     System.out.println("Waiting for connection."); 
     connection = server.accept(); 
     System.out.println("Connection received from " + connection.getInetAddress().getHostName()); 
    } catch (IOException e){ 
     System.out.println(e); 
    } 
} 

private void getStreams() throws IOException{ 
    output = new DataOutputStream(connection.getOutputStream()); 
    input = new DataInputStream(connection.getInputStream()); 
    System.out.println("Got streams"); 
} 

private void processConnection() throws IOException{ 
    sendData("This is a test message"); 
} 

private void closeConnection(){ 
    try{ 
     if(output != null && connection != null){ 
      sendData("SEVER>>> TERMINATE"); 
      output.close(); 
      connection.close(); 
     } 
    } catch (IOException e){ 
     e.printStackTrace(); 
    } 
} 

private void sendData(String message){ 
    try{ 
     JSONObject g = new JSONObject(); 
     g.put("message", message); 
     System.out.println(g.toString()); 
    } catch (Exception e){ 
     System.out.println("Error writing object"); 
    } 
} 

}

и JSON папка находится в том же каталоге, что и ExampleServer.java, причем классы JSON находятся в net/sf/json, как указано в моих импортах. Почему он не работает до выполнения? Почему-то мой путь класса не прав? Каким будет подходящий синтаксис для включения необходимого класса?

Заранее спасибо

ответ

20

От json-lib homepage:

Json Пб требуется (по крайней мере) следующие зависимости в ваших классах:

  1. Jakarta Commons-лан 2.5
  2. jakarta commons-beanutils 1.8.0
  3. jakar TA Обще-коллекции 3.2.1
  4. Jakarta Commons-каротажные 1.1.1
  5. ezmorph 1.0.6

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

Дополнительную информацию о зависимостях проекта можно найти here.

Смежные вопросы