Java RMI应用程序不会退出

时间:2013-11-04 00:56:08

标签: java rmi

我有一个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()方法解析use的输入以调用其他方法。但是,即使我只是在不调用任何其他方法的情况下退出,Java也不会退出。

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

2 个答案:

答案 0 :(得分:5)

看起来ClientImpl是一个远程对象,它仍然被导出,因此在您使用UnicastRemoteObject.unexportObject()取消导出JVM之前,JVM不会退出。

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

答案 1 :(得分:0)

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