title: Getting NotBoundException while writing a Java RMI chat application :-/
body: <p>I have written a Java RMI chat application. There are four classes and two interfaces. Here they are: </p>
  
  <p><em>ChatClient</em></p>
  
  <pre><code>import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  import java.util.Scanner;
  com.za.tutorial.rmi.server.ChatServerIF;
  
  public class ChatClient extends UnicastRemoteObject implements ChatClientIF,Runnable {
  private ChatServerIF chatServer;
  private String name = null;
  
  protected ChatClient(String name, ChatServerIF chatServer) throws RemoteException {
      this.name = name;
      this.chatServer = chatServer;
      chatServer.registerChatClient(this);
  }
  
  public void retrieveMessage(String message) throws RemoteException {
      // TODO Auto-generated method stub
      System.out.println(message);
  }
  
  public void run() {
      Scanner scanner = new Scanner(System.in);
      String message;
      while(true){
          message = scanner.nextLine();
          try {
              chatServer.broadcastMessage(name + " : " + message);
          } catch (RemoteException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
      }
  </code></pre>
  
  <p>}</p>
  
  <p><em>ChatClientDriver</em></p>
  
  <pre><code>import java.net.MalformedURLException;
  import java.rmi.Naming;
  import java.rmi.NotBoundException;
  import java.rmi.RemoteException;
  import com.za.tutorial.rmi.server.ChatServerIF;
  
  public class ChatClientDriver {
  public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException {
  
  String chatServerURL = "rmi://localhost/RMIChatServer";
  ChatServerIF chatServer = (ChatServerIF) Naming.lookup(chatServerURL);
  new Thread(new ChatClient(args[0],chatServer)).start();
  }
  }
  </code></pre>
  
  <p><em>ChatClientInterface</em></p>
  
  <pre><code>import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  public interface ChatClientIF extends Remote {
  void retrieveMessage(String message) throws RemoteException;
  }
  </code></pre>
  
  <p><em>ChatServer</em></p>
  
  <pre><code>import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  import java.util.ArrayList;
  import com.za.tutorial.rmi.client.ChatClientIF;
  
  public class ChatServer extends UnicastRemoteObject implements ChatServerIF {
  
  
  private ArrayList&lt;ChatClientIF&gt; chatClients;
  protected ChatServer() throws RemoteException {
      chatClients = new ArrayList&lt;ChatClientIF&gt;();
      }
  
  public synchronized void registerChatClient(ChatClientIF chatClient)
          throws RemoteException {
      this.chatClients.add(chatClient);
  }
  
  public synchronized void broadcastMessage(String message) throws RemoteException {
      int i = 0;
      while(i &lt; chatClients.size()){
          chatClients.get(i++).retrieveMessage(message);
      }
  }
  }
  </code></pre>
  
  <p><em>ChatServerDriver</em></p>
  
  <pre><code>import java.net.MalformedURLException;
  import java.rmi.Naming;
  import java.rmi.RemoteException;
  
  public class ChatServerDriver {
  
  public static void main(String[] args) throws RemoteException, MalformedURLException {
  Naming.rebind("RMIChatServer", new ChatServer());
  }
  }
  </code></pre>
  
  <p><em>ChatServerInterface</em></p>
  
  <pre><code>import java.rmi.Remote;
  import java.rmi.RemoteException;
  import com.za.tutorial.rmi.client.ChatClientIF;
  
  public interface ChatServerIF extends Remote {
  void registerChatClient(ChatClientIF chatClient) throws RemoteException;
  void broadcastMessage(String message) throws RemoteException;
  }
  </code></pre>
  
  <p>When I run it on Commando, first of all I run rmic ChatClient and ChatServer, then rmiregistry. Then i run chatServerDriver which works completely fine. after that, when I run chatClientDriver with a name, I get the following error, I dont understand why :/ Can I get any solution for this? </p>
  
  <p>Thanks :)</p>
  
  <pre><code>Exception in thread "main" java.rmi.NotBoundException: RMIChatServer
      at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
      at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
      at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
      at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
      at sun.rmi.transport.Transport$1.run(Transport.java:177)
      at sun.rmi.transport.Transport$1.run(Transport.java:174)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722)
      at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
      at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
      at sun.rmi.server.UnicastRef.invoke(Unknown Source)
      at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
      at java.rmi.Naming.lookup(Unknown Source)
      at com.za.tutorial.rmi.client.ChatClientDriver.main(ChatClientDriver.java:15)
  </code></pre>