如果我从命令行创建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
是一个界面
有什么想法吗?
答案 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属性中的教程。
希望它有所帮助。
的信用