У меня есть сервер RMI работает на локальном хосте, экспорт объекта типа Message
:NotBoundException на локальном хосте
try {
MessageServer obj = new MessageServer();
Message stub = (Message) UnicastRemoteObject.exportObject(obj, 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind("M", stub);
} catch (RemoteException e) {
} catch (AlreadyBoundException e) {
}
Тогда я хочу, чтобы начать клиент и получить заглушку для этого объекта. Кажется, что в реестре обнаруживается, но затем в try
блоке NotBoundException
брошено:
java.rmi.NotBoundException: M на sun.rmi.registry.RegistryImpl.lookup (RegistryImpl.java:136) at sun.rmi.registry.RegistryImpl_Skel.dispatch (Неизвестный источник) 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 java.security.AccessController.doPrivileged (родной метод) at sun.rmi.transport.Transport.serviceCa ll (Transport.java:173) at sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:553) at sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:808) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:667) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1110) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:603) at java.lang.Thread.run (Thread.java:679) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:273) at sun.rmi. transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:251) at sun.rmi.server.UnicastRef.invoke (UnicastRef.java:377) в sun.rmi.registry.RegistryImpl_Stub.lookup (Unknown Source) в rmitest.MessageClient.main (MessageClient.java:23)
public static void main(String args[]) {
//String host = "localhost";
Registry registry;
Message stub = null;
try {
registry = LocateRegistry.getRegistry();
stub = (Message) registry.lookup("M"); //NotBoundException thrown here
} catch (NotBoundException ex) {
} catch (AccessException ex) {
} catch (RemoteException ex) {
}
try {
stub.insert("TestString"); //NullPointerException here
} catch (RemoteException ex) {
}
}
Почему "M"
не найден? Как сервер, так и клиент запускаются внутри Netbeans, реестр запускается через терминал заранее.
Вы никогда не узнаете, пока не напишете правильную обработку исключений. – EJP
Как вы это понимаете? Я улавливаю все возможные исключения и при отладке только исключение с показанным сообщением бросается в позицию, помеченную в коде. – user905686
Я имею в виду, что отправленный вами код игнорирует все исключения. Я включаю код сервера, который явно забросил какое-то исключение, исключающее выполнение bind(). Если у вас есть другой код, напишите этот код, а не этот код. – EJP