我有以下的RMI服务器:
public static void main(String[] args) {
try{
ChatSystemImpl chatSystem = new ChatSystemImpl();
ChatSystem chatSystem_stub = (ChatSystem) UnicastRemoteObject.exportObject(chatSystem, 6001);
Registry registry = LocateRegistry.getRegistry("localhost", 6001);
registry.bind("ChatSystem1", chatSystem_stub);
System.out.println("Server up.");
}
catch(Exception ex){
ex.printStackTrace();
}
}
当我跑步时,我得到:
ava.rmi.NoSuchObjectException: no such object in table
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)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at fr.inp.ensimag.examples.chatsystem.Main.main(Main.java:30)
嗯,我不知道什么是错的......现在盯着它看了2个多小时。
这是界面(如果需要):
public interface ChatSystem extends Remote{
void registerUser(UserInfo newUser) throws RemoteException;
void unregisterUser(UserInfo user) throws RemoteException;
boolean userExists(UserInfo user) throws RemoteException;
void send(MessageInfo message) throws RemoteException;
}
实现有以下标题,正文只包含未真正实现的方法,它们仅仅是UnsupportedOperationException
:
public class ChatSystemImpl implements ChatSystem
ChatSystem
接口在其他项目中,然后是其余的源代码,如果它具有任何重要性。
谢谢。
答案 0 :(得分:0)
您的注册表已被取消删除。这通常意味着您通过LocateRegistry.createRegistry()在JVM中运行它,并且让它变为垃圾收集。该方法的结果应存储在静态变量中。这也可能意味着您从未首先启动过注册表。