通過 LocateRegistry.createRegistry(port) 創建了一個 rmiregistry 監聽 port 所在端口,
如果想要在程序中把這個端口關閉,也就是關閉 RMI registry 服務,可以參考以下的代碼。
注:似乎在2003年的時候,這個方法還行不通,到了 JDK6 的版本才解決這個問題的。
參考 Sun bug 4457683, bug 4508962, 以及 這個 mail archive。
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();
}
}