Java RMI应用程序不会退出

pro*_*eek 2 java rmi

我有一个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
}
Run Code Online (Sandbox Code Playgroud)

我必须^ C才能停止应用程序.

act()方法解析use的输入以调用其他方法.但是,即使我只是在不调用任何其他方法的情况下退出,Java也不会退出.

可能有什么问题?我是否需要调用额外的方法才能退出RMI应用程序?

use*_*421 5

它看起来像是ClientImpl一个远程对象,它仍然被导出,因此JVM将不会退出,直到你取消它为止UnicastRemoteObject.unexportObject().

如果是这样,我不知道为什么ClientImpl甚至一个远程对象.你没有做任何遥远的事情.除了注册表之外,你没有做任何远程任何事情.我觉得你有一些东西回到前面.您应该在s您查找的远程对象上调用远程方法.