RMI NoSuchObjectException异常

 

 

java.rmi.NoSuchObjectException: no such object in table

        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)

        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)

        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)

at com.nineday.ServiceImpl_Stub.doService(Unknown Source)

              … …

             

 

 

异常的含义是:试图调用远程虚拟机上已不存在的对象上的方法。这个问题很隐蔽,现象是有时候抛这个异常,有时候调用正常。

 

问题的原因:由于在远程服务器export匿名远程对象,

Remote stub = UnicastRemoteObject.exportObject(new ServiceImpl(), 9999);

匿名对象没有引用,导致随时可能会被JAVA垃圾回收器回收,所以出现了上述现象。

 

       把代码改成如下即可:

       static ServiceImpl  service = new ServiceImpl()

Remote stub = UnicastRemoteObject.exportObject(service, 9999);

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐