我正在写一个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上找到该stub类。我想知道如何解决这个问题?
答案 0 :(得分:3)
问题是您使用的是rmic
。除非您在 Java 5之前使用严格的Java版本,否则不建议这样做。
Java 5及更高版本将动态生成存根。只有在必须支持Java 1.4或更早版本的客户端时才需要使用rmic
。
在Java 5及更高版本中,如果存根是使用rmic
生成的,并且存在于服务器的类路径中,则客户端将尝试通过RMI类加载器加载它们, 即使它们已经在客户端的类路径上可用。
此外,如果您不打算使用RMI类加载器,则无需设置服务器代码库。