Note that there are some explanatory texts on larger screens.

plurals
  1. POGetting NotBoundException while writing a Java RMI chat application :-/
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload