2011-02-13 81 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