RMI找不到绑定对象?

时间:2011-02-08 17:34:14

标签: java rmi remote-access

我有以下的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接口在其他项目中,然后是其余的源代码,如果它具有任何重要性。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的注册表已被取消删除。这通常意味着您通过LocateRegistry.createRegistry()在JVM中运行它,并且让它变为垃圾收集。该方法的结果应存储在静态变量中。这也可能意味着您从未首先启动过注册表。