我有一个在本地主机上运行的 RMI 服务器,导出一个类型的对象Message
:
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
中抛出了 a:
java.rmi.NotBoundException:M 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) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 在 sun.rmi.transport.Transport$1.run(Transport.java:177) 在 java.security.AccessController.doPrivileged(Native方法)在 sun.rmi.transport.Transport.serviceCall(Transport.java:173) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) 在 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) 在 java.lang.Thread.run(Thread.java:679) 在 sun.rmi.transport.StreamRemoteCall .exceptionReceivedFromServer(StreamRemoteCall.java:273) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251) 在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377) 在 sun.rmi.registry。 RegistryImpl_Stub.lookup(Unknown Source) at rmtest.MessageClient.main(MessageClient.java:23)在 sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 在 rmtest.MessageClient.main(MessageClient.java: 23)在 sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 在 rmtest.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 中启动,注册表是通过终端预先启动的。