【问题标题】:Java RMI NoSuchObjectExceptionJava RMI NoSuchObjectException
【发布时间】:2011-06-26 13:19:55
【问题描述】:

我有一个使用 Java RMI 的服务器和客户端。如果我使用一个客户端,下面的代码一切正常。但是,如果我先连接一个客户端,然后再连接第二个客户端,则会引发端口已在使用异常。没关系,所以我断开连接的客户端,然后再次尝试与第二个客户端连接。它给了我这个:

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);

【问题讨论】:

    标签: java rmi clients


    【解决方案1】:

    NoSuchObjectException 表示存根引用了一个未导出的远程对象,无论是显式还是通过 GC。你是在 lookup()、registerClient() 还是 removeClient() 上得到这个?

    【讨论】:

    • 当服务器尝试获取客户端对象的用户名时,我在 registerClient() 第一行得到它。但是我没有看到它是如何被明确地取消导出的,因为上面的行只是导出了对象并且没有其他事情发生......如果我使用两个客户端并连接一个,然后另一个连接,它将抛出端口采用。如果我与第一个客户端断开连接并退出,然后再次与第二个客户端连接,它将正常工作。只是如果我在不退出的情况下断开第一个客户端,我会收到此错误。
    • 顺便说一下,我在本地主机 127.0.0.1 上运行所有客户端/服务器,但我明天会尝试其他 PC:s。如果我为客户端使用不同的端口,则没有问题。
    • 尝试获取 exportObject() 的 result,它是一个存根,并将 that 传递给 server.registerClient()。
    猜你喜欢
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2017-01-19
    • 2011-07-26
    相关资源
    最近更新 更多