Java RMI 应用程序不退出

标签 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
}

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

act() 方法解析用户的输入以调用其他方法。然而,即使我只是退出而不调用任何其他方法,Java 也不会退出。

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

最佳答案

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

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

关于Java RMI 应用程序不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760142/

相关文章:

java - HttpSession 跟踪和监控工具

java - JBoss MBean : How to have an array attribute?

java - Java 中的条件赋值

java - 无法获得 SocketPermission 以使用 RMI

互联网上的java RMI。主机拒绝连接

java - 找不到springframework的标签库描述符

java:rmiregistry设置

java - RMI 表中没有此类对象,服务器通信错误

java - "this"将其作为参数传递给 RMI 时引用发生变化

java - 从静态非 Android 类获取进度的最佳方法是什么?