通過 LocateRegistry.createRegistry(port) 創(chuàng)建了一個 rmiregistry 監(jiān)聽 port 所在端口,
如果想要在程序中把這個端口關閉,也就是關閉 RMI registry 服務,可以參考以下的代碼。
注:似乎在2003年的時候,這個方法還行不通,到了 JDK6 的版本才解決這個問題的。
參考 Sun bug 4457683, bug 4508962, 以及 這個 mail archive。
1234567891011121314151617181920212223242526272829303132 | import java.rmi.NoSuchObjectException;import java.rmi.Remote;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry; public class RMITest { public void testRMIPortRelease() { System.out.println("Testing port release"); System.out.println("Acquiring port... "); Remote reg = null; try { reg = LocateRegistry.createRegistry(1102); } catch (RemoteException ex) { ex.printStackTrace(); } System.out.println("releasing port... "); try { java.rmi.server.UnicastRemoteObject.unexportObject(reg, true); } catch (NoSuchObjectException ex1) { ex1.printStackTrace(); } reg = null; } public static void main(String[] args) { RMITest s = new RMITest(); s.testRMIPortRelease(); }} |
(###)