我编写了一个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但它不起作用。
请告诉我我做错了什么或我能做些什么。 我将不胜感激任何帮助:)
答案 0 :(得分:0)
让它在短暂的延迟后退出一个单独的线程,以便有时间让远程方法完成并发回其结果。