首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java RMI 本地 Client 呼叫遠端 Server 報 ClassNotFoundException 解決

     編輯:程式設計綜合問答

錯誤訊息

java.lang.ClassNotFoundException: IHello (no security manager: RMI class loader disabled)

原因分析

  1. 缺少 SecurityManager:RMI 預設停用遠端類別載入,需安裝 RMISecurityManager 或自訂 SecurityManager。
  2. Stub/Interface 類別未在 Client 端可用:Client 必須能載入遠端介面 (IHello) 與 Stub 類別。
  3. java.rmi.server.codebase 未正確設定:Server 啟動時需指定 -Djava.rmi.server.codebase=https://host:port/classes/,讓 Client 能下載類別。

解決步驟

  1. Server 啟動參數:
java -Djava.rmi.server.codebase=https://server-ip:8080/classes/ \
     -Djava.security.policy=server.policy \
     ServerMain
  1. server.policy 內容:
grant {
    permission java.security.AllPermission;
};
  1. Client 端同樣需設定 SecurityManager 與 codebase(若需動態下載)。
  2. 確保 IHello.class、HelloImpl_Stub.class 放在 HTTP 伺服器對應路徑。

替代方案

  • 將介面與 Stub 打包至 Client 專案,避免動態下載(簡單部署)。
  • 改用 HTTP/REST、gRPC 等現代化 RPC 框架,避開 RMI 複雜的類別載入機制。

參考資源

Java RMI 詳細教學與常見錯誤排查

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved