如何在不获取UnmarshallException的情况下关闭RMI-Server?

时间:2018-05-20 15:10:19

标签: rmi

我编写了一个RMI-Example,现在我的程序问题是,如果用户输入"closeBookManager()",我正在尝试终止或关闭服务器。请考虑以下代码:

if(in.equals("closeBookManager()")) {
    service.closeBookManager();
    break;
}

这段代码在while循环中,始终为true,直到用户输入"closeBookManager()"

现在的问题是,如果用户输入上述字符串,我想关闭服务器。我在服务器端使用System.exit(0)尝试了它

public void closeBookManager() throws RemoteException {
    ...
    System.exit(0);
}

但它会在客户端抛出此错误:

  

线程“main”中的异常java.rmi.UnmarshalException:错误   解组返回标题;嵌套异常是:     java.io.EOFException at   sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:229)     在sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)at   java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227)     在   java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179)     在com.sun.proxy。$ Proxy0.closeBookManager(未知来源)at   Client.main(Client.java:66)引起:java.io.EOFException at   java.io.DataInputStream.readByte(DataInputStream.java:267)at   sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:215)     ......还有5个

我也尝试取消绑定并取消导出Object但它不起作用。

请告诉我我做错了什么或我能做些什么。 我将不胜感激任何帮助:)

1 个答案:

答案 0 :(得分:0)

让它在短暂的延迟后退出一个单独的线程,以便有时间让远程方法完成并发回其结果。