2009-09-27 109 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