所以,问题在于我有一些服务器代码,允许客户端使用rmiregistry调用其上的函数。需要注意的是,我是在OS X终端上运行这些命令,而我有两个工作文件夹:
RMI
- 它将调用rmiregistry和
Server
- 它包含了我所有的服务器代码。
因此,我打开一个终端并输入以下内容:
rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ &
一切都好了,我现在拿到了一个端口。
然后我登录到包含我的服务器代码的“Server”文件夹中运行我的calculatorserver
程序。
现在我被告知需要指定代码库和安全策略:
java -Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ -Djava.security.policy=server.policy calculatorserver
然而,我一直遇到同样的错误:
Server Error: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: calculator
我知道出现这个错误的唯一原因是rmiregistry找不到服务器对象。
如果能提供一些指导就更好了。
-Djava.rmi.server.codebase=...
。您应该只将该参数指定给服务器JVM,或更一般地指定给导出需要代码库的远程对象的JVM。注册表不是其中之一。 - user207421