我创建了一个简单的RMI应用程序,它只是向RMI服务器发送消息。但是在发送消息时我得到了错误消息。我正在使用eclipse来运行程序。
sending hello to 10.0.0.12:3233
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: com.zoondia.ReceiveMessageInterface (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at test.rmi.RmiClient.main(RmiClient.java:28)
Caused by: java.lang.ClassNotFoundException: com.zoondia.ReceiveMessageInterface (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
任何人都知道是什么问题。使用eclipse运行程序。我在eclipse中需要rmi compailor,或者在运行程序时自动编译。
谢谢, VKS。
答案 0 :(得分:1)
该异常表示无法在服务器中安装RMI安全管理器。除非设置了安全管理器,否则RMI将无法从您的客户端下载任何代码。
您需要在服务器代码中执行以下操作:
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new java.rmi.RMISecurityManager());
}
查看RMISecurityManager的javadoc以获取更多信息。
答案 1 :(得分:1)
对于第一个错误,即解组参数,我曾经有过一次错误。确保在运行rmiregistry之前将目录更改为src文件夹
对于第二个错误,请确保您已为服务器和客户端创建了策略文件。
答案 2 :(得分:0)
异常表明命名的类不存在于客户端的类路径中。
这可能是由于以下两个原因之一:
您没有使用代码库功能,也没有将该类包含在客户端JAR文件中。
您正在使用代码库功能,但尚未安装安全管理器。