2011-02-08 112 views
0

我有folloving RMI服务器: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; 
} 

的实施,如下头,身体只包含未真正落实,他们只是thow UnsupportedOperationException方法:

public class ChatSystemImpl implements ChatSystem 

ChatSystem接口在其他项目中,然后是源代码的其余部分,如果它是任何重要的。

谢谢。

回答

0

您的注册表已被取消导出。这通常意味着你通过LocateRegistry.createRegistry()在JVM中运行它,并且让它变成垃圾收集。该方法的结果应该存储在一个静态变量中。这也可能意味着你从未开始注册表。