2012-07-19 3 views
3

이상한 런타임 오류에 대한 질문이 있습니다. 외부 소스에 의해 프롬프트 될 때 JSON 객체로 응답하는 JSON 서버로 작업하고 있습니다. 지금 당장은 JSON 객체를 보내고 실행하기 만하면됩니다. 내 코드는 클래스 경로를 지정하지 않고 컴파일하지만 런타임에 관해서 여기에서 볼 수 있듯이, 그것은 NoClassDefFoundError를 던졌습니다 :Java 런타임 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에 있습니다. 런타임까지 작동하지 않는 이유는 무엇입니까? 어떤 이유로 클래스 경로가 올바르지 않습니까? 필요한 classpath를 포함하기위한 적절한 구문은 무엇입니까? json-lib homepage에서 미리

답변

20

에서

감사 :

JSON-lib 디렉토리가 필요합니다 (적어도) 귀하의 클래스 경로에 다음과 같은 종속 관계 :

  1. 자카르타 평민 - 랭 2.5
  2. jakarta commons-beanutils 1.8.0
  3. jakar 타 평민 - 컬렉션 3.2.1
  4. 자카르타 평민 로깅 1.1.1
  5. ezmorph 1.0.6

구현은 컴파일 컴파일러가 올바른 클래스와 메소드를 찾을 수 있다는 것을 보여줍니다. 그러나 이러한 클래스 및 메서드의 구현은 다른 라이브러리에 의존 할 수 있습니다.

프로젝트 종속성에 대한 추가 정보는 here에서 찾을 수 있습니다.

관련 문제