3

我正在编写一个 rmi 应用程序。当我将所有类放在一个目录(一个包)中时,一切都运行良好。但是,当我尝试拆分服务器部分和客户端部分时,客户端会发生异常。服务器正常工作。以下是异常发生后的堆栈跟踪的一部分:

Exception in thread "main" 
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.lang.ClassNotFoundException: com.clientpackage.ClientImpl_Stub (no security manager: RMI class loader disabled)

我使用 unicastRemoteobject 方法将来自客户端的对象实例传递给服务器以进行回调。我还使用 rmic 为对象生成存根文件。似乎该程序在其 CLASSPATH 上找不到该存根类。我想知道如何解决这个问题?

4

1 回答 1

3

问题是您正在使用rmic. 除非您使用的是Java 5之前的Java 版本,否则不建议这样做。

Java 5 及更高版本将动态生成存根。rmic仅当您必须支持 Java 1.4 或更早版本的客户端时才需要使用。

在 Java 5 及更高版本中,如果存根是用 生成的rmic,并且存在于服务器的类路径中,则客户端将尝试通过 RMI 类加载器加载它们,即使它们已经在客户端的类路径中可用。

此外,如果您不打算使用 RMI 类加载器,则无需设置服务器代码库。

于 2009-09-29T18:46:43.770 回答