2009-09-29 166 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