2009-09-27 65 views
0

我在写一个rmi应用程序。当我把所有的类放在一个目录中时,一切正常。但是,当我尝试拆分服务器部分和客户端部分时,它引发java.lang.ClassNotFoundException.myclasses 它似乎是注册表无法在其CLASSPATH上找到该类。我想知道如何解决这个问题?java rmi例外

回答

0

您是否在客户端和服务器的参数中指定了classpath目录?

从教程:

服务器

在Solaris操作系统:

的java -classpath classDir -Djava.rmi.server.codebase =文件:classDir/example.hello。服务器&

在Windows平台上:

开始JAV一个-classpath classDir -Djava.rmi.server.codebase =文件:

的java -classpath classDir例如:classDir/example.hello.Server

一旦服务器已经准备好,则客户端可以如下运行。 hello.Client 其中classDir是类文件树

http://java.sun.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html#5

+0

它解决了这个问题。但是,运行客户端时,我遇到了类似的问题。 线程“main”中的异常java.rmi.ServerException:在服务器线程中发生RemoteException;嵌套的异常是: \t java.rmi.UnmarshalException:error unmarshalling arguments;嵌套的例外是: \t抛出java.lang.ClassNotFoundException:com.v3q6.ClientBootstrap.ClientImpl_Stub(无安全管理器:RMI类加载器禁用) \t在sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:353) 。 .. ... 原因可能是我使用了“UnicastRemoteObject.exportObject(client);”你有什么想法吗? – 2009-09-27 23:38:50

+0

您可能需要再次运行rmic以生成存根。 – UberAlex 2009-09-28 08:09:36

-1

注册表在那里将客户端接口与其服务器实现类连接起来。在客户端上,您需要在类路径上具有接口类定义。

另外,客户端根本不应该引用实现类 - 所有东西都应该在接口/存根类中。

如果这没有回答你的问题,你需要更具体,并提供至少一些代码。

+0

号注册表的根目录下是否有名称与存根连接起来。它不知道任何关于他的实现类。但要保存存根的实例,它需要CLASSPATH中的类以及存根所依赖的每个应用程序类。 – EJP 2017-07-05 03:42:29