2015-12-09 225 views
0

我試圖讓我的應用程序在兩個包,以便以後進行模擬在兩臺不同的機器,但是當我做,我得到:ClassCastException異常的Java RMI通知構架

java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to client.RemoteServer 
at client.NotificationSink.<init>(NotificationSink.java:34) 
at client.NotificationSink.main(NotificationSink.java:20) 

我想,我必須在客戶端也移動類RemoteImplementation,以避免這種異常。但我確定我的整個結構是否正確。我的問題: 如何解決這個異常? 我的整體結構是否正確(我正在建立通知框架)?

enter image description here

+0

RemoteServer有一個接口嗎? – Abdelhak

+0

是的,它是一個界面以及RemoteClient。 – Nikola

+0

https://docs.oracle.com/javase/tutorial/rmi/overview.html – Fildor

回答

0

我認爲這通常意味着你有兩個intercaes RemoteServer出現在你的系統中,這兩個國家都加載在服務器,而你試圖通過使用一個代理副本創建一個實例班級代碼期待另一個。
嘗試刪除client.RemoteServer中的一個。

+0

在RemoteServer中,我有方法寄存器(RemoteClient c),並在RemoteClient中有通知(通知n)。所以我應該在一個界面中傳輸這兩種方法?(兩個界面都可以擴展遠程)。 – Nikola

+0

@Nikola嘗試它在一個接口中傳輸所有方法 – Abdelhak

+1

@Nikola號沒有理由組合接口。一個用於服務器,另一個用於客戶端。但是你不能在不同的包中使用同一個接口的兩個副本,並期望它能夠工作。通常情況下,服務器和客戶端之間通常會有第三個包和第三個JAR文件。 – EJP