2009-09-29 168 views
3

我在写一个rmi应用程序。当我把所有的类放在一个目录中(一个包)时,一切正常。但是,当我尝试拆分服务器部分和客户端部分时,客户端发生异常。服务器正常工作。 这里是发生异常后的堆栈跟踪的一部分:java 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上找不到该存根类。我想知道如何解决这个问题?

+0

你能解决这个问题吗? – erickson 2009-10-02 04:31:23

回答

3

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

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

在Java 5及更高版本,如果存根与rmic产生的,并且是目前服务器的类路径上,客户端将尝试通过RMI类加载器加载它们,即使他们已经可以在客户的班级路径。

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

+0

+1因为你明显看到过这个问题:) – aperkins 2009-09-29 18:55:45

+0

不幸的是,是的! – erickson 2009-09-29 19:21:16

+0

线程“main”中的异常java.rmi.StubNotFoundException:未找到存根类... 我摆脱了由rmic生成的存根文件。它现在抛出上面的excepions节目。你知道这是为什么吗? – 2009-09-29 23:55:09