0

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

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

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

ProcessBuilder obj = new ProcessBuilder ("rmiregistry","2500");

Process obj_process = obj.start();

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

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是一个接口

有任何想法吗?

4

2 回答 2

1

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

于 2012-09-11T07:42:59.570 回答
0

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

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

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

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

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

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

希望能帮助到你。

归功于这个人

于 2012-09-10T21:34:36.770 回答