使用ProcessBuilder时,客户端无法连接到RMI注册表



如果我从命令行创建RMI注册表,则客户端将对象绑定到注册表没有问题。

但是,如果我使用ProcessBuilder启动RMI注册表,则会出现错误。

这是我使用ProcessBuilder 创建rmiregistry的代码

ProcessBuilder obj = new ProcessBuilder ("rmiregistry","2500");
Process obj_process = obj.start();

当我试图绑定到我自己的RMI注册表时,我使用ProcessBuilder时遇到的错误

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: node_func

node_func是一个接口

有什么想法吗?

我不明白为什么你可以使用LocateRegistry.createRegistry()来启动一个单独的过程。如果你这样做了,这个问题也会消失。

发生异常是因为rmiregistry应用程序不知道从哪里加载类。当您尝试在RMI注册表中绑定对象时,注册表会下载该对象的类定义。

处理这个问题的正确方法是设置java.rmi.server.coreduct属性

(右键单击您的项目->运行方式->运行配置->参数->VM参数)。

该属性要求目录路径以正斜杠终止,如下所示:

-Djava.rmi.server.codebase=文件:${workspace_location}/文件夹/

如果${workspace_location}变量是一个相对路径,而rmiregistry应用程序不是在同一目录中启动的,因此相对路径不正确,您也可能会遇到问题。如果您将路径设为绝对路径,或者在适当的目录中启动rmiregistry,则ClassNotFoundException应该会消失。有关更多详细信息,请参阅java.rmi.server.coreduct属性的教程。

希望能有所帮助。

归功于这个家伙

最新更新