Java RMI注册表可以';找不到服务器对象

Java RMI注册表可以';找不到服务器对象,java,server,rmi,rmiregistry,Java,Server,Rmi,Rmiregistry,所以,问题是我有一些服务器代码,允许客户机使用rmiregistry对其调用函数。应该注意的是,我在OS X终端上运行这些命令,我有两个文件夹: RMI-将调用RMI注册表和 服务器-其中包含我的所有服务器代码 因此,我打开一个终端并输入: rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ & 一切都很好,我得到了一个港口。 然后,我登录到包含服务器代码的服务器文件夹,以运行我的calculatorse

所以,问题是我有一些服务器代码,允许客户机使用rmiregistry对其调用函数。应该注意的是,我在OS X终端上运行这些命令,我有两个文件夹:

RMI
-将调用RMI注册表和
服务器
-其中包含我的所有服务器代码

因此,我打开一个终端并输入:

rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/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
我知道出现此错误的唯一原因是注册中心找不到服务器对象


请提供一些指导,这不是真正的HTTP URL。它是一个目录名,前面有
http:
。您需要在真正的http服务器上使用真正的
http:
URL。或FTP

您可以使用
文件:
URL,但是您或多或少地被困在一个主机中,在这种情况下,您实际上根本不需要代码库功能。如果您确实使用了
文件:
URL,那么它必须对注册表和客户端是可理解的,这同样意味着它们都在同一个主机中,或者它命名了注册表和客户端可以看到的共享目录


注意:不要将代码库指定给注册表(或客户端,除非它导出远程(回调)对象):只指定给服务器JVM

我的错误,我把它记为“文件:”URL-粘贴了错误的剪贴板。这就是我想要的。指定服务器JVM的代码库到底意味着什么?“指定代码库”=
-Djava.rmi.server.codebase=…
。您应该只将该参数指定给服务器JVM,或者更一般地指定给导出需要代码库的远程对象的JVM。注册表不是其中之一。