2

我有一个 Java RMI 应用程序。问题是当我调用 RMI 方法,然后完成代码时。申请没有结束。

在命令行中,显示“Bye”消息,但不显示提示行。

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 应用程序?

4

2 回答 2

5

它看起来像是ClientImpl一个远程对象并且它仍然被导出,所以在你取消导出它之前 JVM 不会退出,使用UnicastRemoteObject.unexportObject().

如果是这样,我不知道为什么ClientImpl甚至一个远程对象。你没有用它做任何远程操作。除了注册表之外,您没有对这里的任何东西做任何远程操作。我认为你有一些前后矛盾的东西。您应该在s您查找的远程对象上调用远程方法。

于 2013-11-04T01:17:36.603 回答
0

这是由于没有使用对象s调用远程方法。如果您这样做,远程对象将自动取消导出

于 2016-11-29T04:03:04.790 回答