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

时间:2012-09-10 21:20:01

标签: java process rmi processbuilder rmiregistry

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

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

这是我使用rmiregistry

创建ProcessBuilder的代码
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是一个界面

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

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

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

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

希望它有所帮助。

this guy

的信用