title: Java runtime ClassNotFoundException
body: <p>Just had a question about an odd runtime error that I'm having.  I'm working with a JSON server that responds with a JSON object when prompted by an outside source.  As of right now, however, I'm simply trying to get the JSON object up and running before sending it out.  My code compiles without specifying any classpath, but when it comes to runtime, it throws a <code>NoClassDefFoundError</code> as seen here:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>My code follows here:</p>
  
  <pre><code>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 &amp;&amp; connection != null){
              sendData("SEVER&gt;&gt;&gt; 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");
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>and the JSON folder is in the same directory as <code>ExampleServer.java</code>, with the JSON classes residing in <code>net/sf/json</code> as specified in my imports.  Why is it not working until runtime? Is my classpath not right for some reason? What would be the appropriate syntax for including a necessary classpath?</p>
  
  <p>Thanks in advance</p>