2011-02-13 57 views
1

我有一个使用Java RMI的服务器和客户端。如果我使用一个客户端,下面的代码都可以。但是,如果我连接到一个客户端,然后再连接另一个客户端,它会抛出已在使用中的端口异常。这很好,所以我断开连接的客户端,然后再次尝试与第二个客户端连接。它给了我这样的:Java RMI NoSuchObjectException

java.rmi.NoSuchObjectException:表

这是为什么没有这样的对象?

//CONNECT 

Registry registry = LocateRegistry.getRegistry(
    Options.getRegistryIp(), Options.getRegistryPort()); 
server = (IServer) registry.lookup(Constants.MB_SERVER_NAME); 

UnicastRemoteObject.exportObject(client, Options.getMyPort()); 
server.registerClient(client); 

//DISCONNECT 

server.removeClient(client, client.getUser()); 
UnicastRemoteObject.unexportObject(client, false); 

回答

1

NoSuchObjectException表示存根引用已明确或通过GC未导出的远程对象。你在lookup()或registerClient()或removeClient()上得到了这个吗?

+0

当服务器尝试获取客户端对象的用户名时,我在registerClient()的第一行获取它。但我不明白它是如何明确未导出的,因为上面的行刚刚导出了对象,并且没有其他事情在进行...... 如果我使用两个客户端并连接一个,那么另一个,它会抛出端口在使用中。如果我断开与第一个客户端并退出,然后再次连接第二个客户端它将工作没有任何问题。只是如果我断开第一个客户端而不退出,我会得到这个错误。 – Lightforce 2011-02-14 02:05:49