我有一个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应用程序?
答案 0 :(得分:5)
看起来ClientImpl
是一个远程对象,它仍然被导出,因此在您使用UnicastRemoteObject.unexportObject()
取消导出JVM之前,JVM不会退出。
如果是这样,我不知道为什么ClientImpl
甚至 是远程对象。你没有做任何遥远的事情。除了注册表之外,你没有在这里用任何远程做任何事情。我觉得你有一些东西回到前面。您应该在您查找的远程对象s
上调用远程方法。
答案 1 :(得分:0)
这是由于未使用对象 s 调用远程方法。如果您这样做,远程对象将自动取消导出