我查看了Java RMI的教程,他們建議在命令行(Windows)中手動執行上述任務。在細節,這意味着:Java RMI-自動創建/複製存根和註冊表開始
設置服務器項目的路徑JDK/bin文件夾
使用RMIC 「ClassImplementingRemoteInterface」
啓動rmiregistry的
副本存根文件到客戶項目的bin文件夾
我發現,可以通過將以下代碼添加到服務器的主要方法來啓動註冊表。
`try {
java.rmi.registry.LocateRegistry.createRegistry(PORT);
System.out.println("RMI registry ready.");
} catch (Exception e) {
System.out.println("Exception starting RMI registry:");
e.printStackTrace();
}
`
現在,我通過命令行創建了存根,並將它們複製到客戶端項目的bin文件夾中。我很困惑如何自動執行此操作,因爲文檔建議,不再需要手動創建存根。 Oracle Documentation
那麼是否有更靈活的方式來創建存根並將它們移動到客戶端?
UPDATE:
要啓動的註冊表,併發送遠程對象,只有方法「java.rmi.registry.LocateRegistry.createRegistry(端口)和」 UnicastRemoteObject.exportObject中(對象,端口)是必要的。他們應在服務器的主要方法中實現:
try {
java.rmi.registry.LocateRegistry.createRegistry(1099);
Connector Hello = new Connector();
IConnector stub = (IConnector) UnicastRemoteObject.exportObject(Hello, 1099);
// System.setProperty("java.rmi.server.hostname","134.155.182.118");
Naming.rebind("rmi://localhost/ABC", Hello);
System.out.println("Addition Server is ready.");
}catch (Exception e) {
System.out.println("Addition Server failed: " + e);
}
您需要將'LocateRegistry.createRegistry()'的結果存儲到一個靜態變量中,以防止它被GC'd。 – EJP
您需要在執行任何RMI代碼之前設置* all *系統屬性。你的'java.rmi.server.hostname'不會生效。 – EJP