我有一个 Java RMI 应用程序。问题是当我调用 RMI 方法,然后完成代码时。应用并没有结束。
在命令行中,显示“再见”消息,但不显示提示行。
public static void main(String args[]) throws Exception {
...
System.setSecurityManager(new RMISecurityManager());
s = (Registry) Naming.lookup("rmi://localhost/Registry");
ChatClientImpl c = new ChatClientImpl(name);
c.act(s);
System.out.println("Bye"); <-- "Bye" message is shown
}
我必须 ^C 才能停止应用程序。
act() 方法解析用户的输入以调用其他方法。然而,即使我只是退出而不调用任何其他方法,Java 也不会退出。
可能出了什么问题?我是否需要调用额外的方法才能退出 RMI 应用程序?
最佳答案
看起来 ClientImpl
是一个远程对象,并且仍然被导出,因此 JVM 不会退出,直到您使用 UnicastRemoteObject.unexportObject()
取消导出它。
如果是这样,我不知道为什么 ClientImpl
甚至是一个远程对象。你没有用它做任何远程的事情。除了注册表之外,您不会对这里的任何东西进行任何远程操作。我认为你有一些从前到后的东西。您应该在您查找的远程对象s
上调用远程方法。
关于Java RMI 应用程序不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760142/