在網上找了一個RMI的簡單樣本,沒想到僅僅是個簡單例子,我就遇到好多問題,下面把這些問題和解決方案分析出來,供大家參考
先貼代碼
遠程介面 HelloIn.java
import java.rmi.*;
public interface HelloIn extends java.rmi.Remote{
String sayHello() throws RemoteException;
}
服務端程式Hello.java
import java.rmi.*;
import java.net.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class Hello extends java.rmi.server.UnicastRemoteObject implements HelloIn{
public Hello() throws RemoteException{
super();
}
public String sayHello() throws RemoteException{
return "Hello,World!";
}
public static void main(String[] args){//服務註冊
try{
Hello h=new Hello();
java.rmi.Naming.rebind("hello",h);
System.out.print("Ready......");
}
catch(Exception e){
e.printStackTrace();
}
}
}
用戶端程式Helloworld.java
import java.rmi.*;
import java.rmi.registry.*;
public class Helloworld{
public static void main(String[] args){
try{
HelloIn hi=(HelloIn)Naming.lookup("hello");
for(int i=0;i<10;i++){
System.out.println(hi.sayHello());
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
ok,三個代碼檔案寫好了,然後做以下步驟
1.在終端切換到三個代碼檔案所在目錄
1.1編譯產生HelloIn.class
1.2 編譯產生Hello.class (要先產生HelloIn.class,因為有依賴 (編譯命令javac -cp XXXXXX Hello.java)xxxxxx為HelloIn.class 的目錄 )
2.rmic Hello 產生Hello_Stub.class(一種方法是切換到jdk/bin 直接運行rmic,另一種方法是把Hello.class檔案目錄添加到classpath下)
3.在eclipse下運行Hello.java
4. 運行rmiregistry (切換到jdk/bin)
5.再運行Helloworld.java
有些文檔提到會產生skeleton.class檔案,理論上也應該有的,可是我按照他們說的步驟並沒有產生此檔案,但是運行結果也正常,哪位大牛可以解釋下?
上面的方法已經融合了錯誤的解決辦法,代碼已運行。