2014-01-08 60 views
1

我有一個工作的RMI服務器程序,我可以編譯並直接從.class文件執行。可執行RMI JAR文件的ClassNotFoundException存根

但是,當我試圖爲每個這些程序創建一個JAR文件時,我得到一個ClassNotFoundException: ChatImpl_Stub導致RemoteException執行。

我的清單是(加在最後一個空行):

Main-Class: Server 
Class-Path: chat-RMI-common.jar 

當聊天RMI-常見的是含有聊天界面爲客戶端的JAR文件。

我成功創建與JAR:

jar cvmf ..\MANIFEST.MF chat-RMI-server.jar *.class 

服務器JAR確實含有ChatImpl_Stub。然而除了顯示出來,當我嘗試啓動JAR文件:

java -Djava.rmi.server.codebase="file:chat-RMI-common.jar file:chat-RMI-server.jar" 
    -Djava.security.policy=..\security.policy 
    -jar chat-RMI-server.jar 

Naming.rebind功能,涉及ChatImpl,被稱爲(在程序開始)出現的異常。

我的安全策略:

grant { 
    permission java.security.AllPermission; 
} 

什麼我忘了還是?在此先感謝您的時間。

回答

1

有堆棧跟蹤好好看看。註冊表找不到該類。它需要在註冊表的CLASSPATH上。所以,你要麼需要開始用正確的JAR註冊表上的CLASSPATH,或者更好的是啓動它的服務器JVM內部,LocateRegistry.createRegistry()。

+0

它現在,我選擇了懶惰的選項(createRegistry()),謝謝。任何想法如何我可以在清單中嵌入java.codebase和java.security.policy選項,而不是使用腳本來運行JAR? PS:我會接受你的答案,只是想先試後1米或2的東西;) – Vulpo

+0

你不能嵌入其中的任意一種東西放到清單,但你可以將它們設置爲系統屬性的第一件事就是你的main()。你可以看看使用JWS,它允許你將系統屬性嵌入到XML文件中。 – EJP

+0

我得到其所需的註冊類 – fanky