2011-10-06 30 views
0

我試圖運行此太陽教程中的示例代碼:獲得的Java RMI和運行

http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html

我複製了他們所有的代碼完全變成一個Eclipse項目並運行「rmiregistry的&」從終端(我正在運行OSX)。

當我嘗試運行服務器,我得到

Server exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: suntut.Hello 

我一直在freenode上的註冊表本身並不需要知道我的類的任何保證通過#java。但似乎更奇怪的是,這個問題與我的文件名或什麼有關 - 所有這三個類在編譯時都能看到對方,它們全都在Eclipse項目的同一個包中,等等。任何人都可以幫我開始診斷嗎?

更新: 我試着從命令行運行它。從/用戶/ [我] /工作區/ [項目] /測試/我跑

java suntut/Server 

,並得到了確切的同樣的錯誤。 (這是在用javac成功編譯所有內容之後)

+1

你能告訴我們你用來產生服務器的確切的命令行調用嗎?另外,爲你的類路徑發佈確切的目錄結構會有所幫助。 –

+0

我在eclipse中運行它。我設置了-Djava.rmi.server.codebase = file:按照本教程的建議。 – Personman

+0

目錄結構是/ Users//workspace/ /testing/suntut/{Server,Client,Hello}.java – Personman

回答

1

如果這是您第一次使用RMI,我建議您在不更改任何內容(即不包含軟件包名稱)的情況下按照指示操​​作。這使得其他人很容易幫助你,而你犯錯的機率很低。

暫時停止使用Eclipse,並嘗試按照教程中的說明進行操作。使用IDE,你將最終混合IDE和真正的問題。話雖如此,運行Java類時必須使用完全限定的類名稱。如果測試是軟件包名稱的一部分,則必須使用testing.suntut.Server而不僅僅是suntut.Server