我正在开发两个通过RMI连接的应用程序。沟通是双向的,一切正常,直到我在Windows上运行。当我将jar文件发送到Debian时,连接失败,出现java.rmi.NoSuchObjectException
。
任何想法有什么区别的Linux或为什么不工作?Linux上的java.rmi.NoSuchObjectException
编辑:我的代码:
服务器端:
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
引用存在,我启动一个应用程序,即时第二个应用程序,都在本地主机上。我可能会尝试使参考静态,但恐怕,不存在的参考不是问题 – Kousalik
现在我正在寻找,它一直是静态参考。查找找到引用,但是当我立即调用一个方法时,它失败。 – Kousalik
@Kousalik它是由new()创建的对远程对象的引用,还是由exportObject()返回的对stub的引用?你是否在使用单独的注册表或进程内注册表?如果后者,你是否持有一个静态的参考?由LocateRegistry()返回。createRegistry()? – EJP