简单的RMI应用程序

时间:2011-09-27 12:48:52

标签: java rmi

我创建了一个简单的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。

3 个答案:

答案 0 :(得分:1)

该异常表示无法在服务器中安装RMI安全管理器。除非设置了安全管理器,否则RMI将无法从您的客户端下载任何代码。

您需要在服务器代码中执行以下操作:

if (System.getSecurityManager() == null) 
{
    System.setSecurityManager(new java.rmi.RMISecurityManager());
}

查看RMISecurityManager的javadoc以获取更多信息。

答案 1 :(得分:1)

对于第一个错误,即解组参数,我曾经有过一次错误。确保在运行rmiregistry之前将目录更改为src文件夹

对于第二个错误,请确保您已为服务器和客户端创建了策略文件。

答案 2 :(得分:0)

异常表明命名的类不存在于客户端的类路径中。

这可能是由于以下两个原因之一:

  1. 您没有使用代码库功能,也没有将该类包含在客户端JAR文件中。

  2. 您正在使用代码库功能,但尚未安装安全管理器。