0



我正在通过 RMI 连接的应用程序开发两个。通信是双向的,一切正常,直到我在 Windows 上运行。当我将 jar 文件带到 Debian 时,连接失败并显示java.rmi.NoSuchObjectException.

知道 linux 有什么不同或为什么它不工作吗?

编辑:我的代码:
服务器端:

static Registrator clientRegistrator = null; // static field, interface extending java.rmi.Remote
...
Registry rmiRegistry = LocateRegistry.createRegistry(RmiConstants.RMI_REGISTRY_PORT);
clientRegistrator = (Registrator) UnicastRemoteObject.exportObject(new RmiClientRegistrator(networkListeners), RmiConstants.RMI_REGISTRY_PORT); // RmiClientRegistrator implements Registrator interface
rmiRegistry.bind(RmiConstants.RMI_SERVER_MARK, clientRegistrator);


客户端:

static Registrator serverRegistrator = null;
String rmiConnectionString = "rmi://localhost:" + RmiConstants.RMI_REGISTRY_PORT + "/" + RmiConstants.RMI_SERVER_MARK;
serverRegistrator = (Registrator) Naming.lookup(rmiConnectionString);
serverRegistrator.registerClient(dataReceiver); // fails here, with mentioned exception
4

2 回答 2

2

您的存根引用的远程对象不再存在。更准确地说,它不再被导出。除非您自己取消导出它,或者除非网络分区导致 DGC 故障,否则在客户端仍然有一个实时存根时不应发生这种情况。

对此最可靠的补救措施是在 JVM 中保留对远程对象的静态引用,该远程对象从中导出。

于 2013-01-24T22:18:28.580 回答
-1

你看到这里了吗:

java.rmi.NoSuchObjectException:表中没有这样的对象

Java RMI NoSuchObjectException

这里:

如果尝试调用远程虚拟机中不再存在的对象的方法,则会引发NoSuchObjectException 。如果在尝试调用远程对象上的方法时发生 NoSuchObjectException,则调用可能会被重新传输,并且仍然保留 RMI 的“最多一次”调用语义。方法 java.rmi.server.RemoteObject.toStub 以及 java.rmi.server.UnicastRemoteObject 和 java.rmi.activation.Activatable 的 unexportObject 方法也会引发 NoSuchObjectException 和

于 2013-01-24T12:58:12.547 回答