3

我正在使用 rmi 开发类似 Twitter。我在 Windows 上工作,一切正常。

但是在linux上我有:

java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: server.SimpleBark
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:196)
    ...

在客户端弹出这个异常,并且似乎客户端没有使用代码库服务器,代码库服务器没有收到任何连接。

我再说一遍,在 Windows 上一切正常,我找不到它的来源。

4

2 回答 2

4

来自 JDK 7 指南

从 JDK 7 Update 21 开始,RMI 属性 java.rmi.server.useCodebaseOnly 默认设置为 true。

从 JDK 7 指南中,尚未更新

java.rmi.server.useCodebaseOnly

如果此值为 true,则禁止自动加载类,但从本地 CLASSPATH 和此 VM 上设置的 java.rmi.server.codebase 属性除外。使用此属性可防止客户端 VM 从其他代码库动态下载字节码。由于存在错误,在 1.2 和 1.2.1 的实现中忽略了此属性。

因此,您的 Windows 机器上的 Java 版本似乎已过时。更新后,解决此问题的最佳方法是在客户端包含所需的类,而不是通过网络动态加载类。

于 2013-06-02T15:24:23.353 回答
0

只需从客户端和注册表类路径中删除类。

于 2013-06-02T23:02:18.090 回答