2012-09-09 138 views
0

我正在讀頭第一個Java,我即將嘗試顯示如何使用RMI的現成烘焙代碼。 這些是類:rmic錯誤類未找到

遠程接口

import java.rmi.*; 

public interface MyRemote extends Remote { 

    public String sayHello() throws RemoteException; 
} 

的遠程實現

import java.rmi.*; 
import java.rmi.server.*; 

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote { 

    public String sayHello() { 
     return "Server Says,Hello"; 
    } 

    public MyRemoteImpl() throws RemoteException { } 

    public static void main(String[] args) { 

     try { 
      MyRemote service = new MyRemoteImpl(); 
      Naming.rebind("Remote Hello", service); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

然後我放置的.java和.class文件在C:\ RMI。運行它時,它說MyRemoteImpl類沒有找到,即使我從同一個目錄運行。我怎樣才能解決這個問題?謝謝。

編輯:

-classpath . 

默認情況下,RMIC的類路徑是從CLASSPATH環境變量派生(感謝EJP爲:當我試圖運行這個命令

rmic MyRemoteImpl 
+0

到底是什麼答案呢?你是如何解決它的?我面臨同樣的問題,不想爲此啓動一個新線程。 –

回答

-1

嘗試添加錯誤出現更正)。

+0

不,不是。請參閱工具文檔。默認情況下,rmic的類路徑來自CLASSPATH環境變量,它肯定總是包含'。'。 – EJP

+0

「應該總是包含'。'」?我嚴重懷疑這一點。 – Isaac

0

如果您不是從包含.class文件的目錄運行此命令,那麼應該是,假設沒有包含您所發佈內容的聲明。如果有包聲明,您應該從包含最高級別包的目錄運行此命令。

否則,您的CLASSPATH環境變量有問題。它至少應該包含「。」,也可能包含其他一些內容。作爲一種解決方法,您可以採用Isaac的建議,但在編譯和執行時只會遇到同樣的問題。

+0

是否編輯CLASSPATH環境變量以始終包含「。」或不,取決於你的使用模式。有些人更喜歡避免系統範圍的編譯時定義,其他人則歡迎他們。然後,大多數人不會從命令行手動編譯。我實際上認爲CLASSPATH環境變量方法是一種「解決方法」,但這只是我的口味。 – Isaac

+0

@Isaac另一種意思是必須指定-classpath。在每個Java命令行工具上? javac,java,javap,javah,keytool,jar,jarsigner,idlj,...不是很吸引人。其中大多數嵌入在IDE中,當然,但不是全部。 – EJP

+0

@downvoter請向我們解釋爲什麼這個答案沒有用。 – EJP

0
  1. 創建一個文件夾命名爲HelloServer
  2. 添加這個包package HelloServer;每個類,MyRemoteMyRemoteImpl的頂部。
  3. 打開cmd並從包含HelloServer文件夾的目錄中寫入javac HelloServer/MyRemote.javajavac HelloServer/MyRemoteImpl.java
  4. 從包含HelloServer文件夾的目錄中寫入rmic HelloServer.MyRemoteImpl
  5. 您現在應該有一個MyRemoteImpl_stub.class,你可以有一個愉快的一天:)

PS:重要的是,包名是比RMI或類中使用的任何對象不同。否則你會遇到物體碰撞。

0

由於我有同樣的問題,這些答案都沒有幫助我,我會添加什麼爲我工作。我在包含MyRemoteImpl.java的目錄中運行rmic MyRemoteImpl並得到相同的錯誤。當我在包含MyRemoteImpl.class的目錄中運行rmic MyRemoteImpl時,它工作並創建了MyRemoteImpl_Stub.class。我不需要設置CLASSPATH。

0

如果類位於C:/../ SRC /分配/ implement.class然後

  1. 改變你在通過輸入cmd目錄: - CD C:/....../ src
  2. 運行命令: - rmic Assign.implement。類

它爲我

1

BuddingProgrammer的評論工作對我也是如此。例如,如果您的課程位於文件夾C:\ users \ renato \ workspace \ ADI \ src \ semana5中,您應該轉到上面的一個級別: C:\ users \ renato \ workspace \ ADI \ src,您應該編譯如下:javac的semana5 \ Calculadora.java

要運行RMI,你應該輸入C:\users\renato\workspace\ADI\src以下命令:

rmic semana5.CalculadoraImp 
+0

只有當Java類位於名爲'semana5'的包中時,纔會出現這種情況。 – EJP