2011-01-19 60 views
3

我正在尋找RMI來完成大學項目,而且我遇到了一些問題。從第五版起,應該自動生成必要的存根文件(據我所知,以前需要額外的步驟)。javac不會爲RMI創建存根

但是,在遵循本教程http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html並使用Javac編譯我的類之後,我只獲得了標準類文件,沒有標記我的存根文件。

這是確認當我嘗試運行我的項目,我的應用程序崩潰說它無法找到任何存根文件。我錯過了什麼嗎?

NB,運行java -version給了我這樣的:

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode) 
+0

從我的經驗來看,RMI是一個痛苦的工作。我在大學獲得的RMI任務是唯一一位講師不介意提交是否可以真正執行的人...... – chrisbunney 2011-01-19 23:31:55

回答

2

我相信你使用像

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server); 
在服務器

,而不是

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0); 

注意兩個參數exportObject() - 第二個版本返回不同的類型。它確實對我有所幫助。

1

存根不需要或在> = 5.0 jvms時生成。 可能有些路​​徑是錯誤的,本教程並不十分清楚如何設置目錄/路徑以及從哪裏運行內容。

以下爲我工作:

 
~/tmp$ mkdir -p hello/example 
~/tmp$ vim hello/example/Hello.java [copy/paste the code of Hello.java here] 
~/tmp$ vim hello/example/Server.java [copy/paste the code of Server.java here] 
~/tmp$ vim hello/example/Client.java [copy/paste the code of Client.java here] 
~/tmp$ mkdir build 
~/tmp$ javac -d build/ hello/example/*.java 
~/tmp$ rmiregistry & 
~/tmp$ java -classpath build -Djava.rmi.server.codebase=file:build/ example.hello.Server & 
Server ready 
~/tmp$ java -classpath build example.hello.Client 
response: Hello, world! 

這裏的重要組成部分,是構建和運行的東西時,以及通過適當的目錄類路徑和-Djava.rmi.server你站在哪個目錄。代碼庫。