Как закрыть RMI-сервер, не получая UnmarshallException? - PullRequest
0 голосов
/ 20 мая 2018

Я запрограммировал RMI-пример, и теперь проблема с моей Программой заключается в том, что я пытаюсь завершить или закрыть Сервер, если Пользователь вводит "closeBookManager()".Рассмотрим следующий код:

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

Этот фрагмент кода находится в цикле while, что всегда верно, пока пользователь не введет "closeBookManager()"

Теперь проблема в том, что пользователь вводитв этой упомянутой строке я хотел бы закрыть сервер.Я пробовал это с System.exit(0) на стороне сервера

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

, но он выдает эту ошибку на стороне клиента:


Исключение в потоке "main" java.rmi.UnmarshalException: Ошибка при отмене сортировки возвращаемого заголовка;Вложенное исключение: java.io.EOFException на sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:229) на sun.rmi.server.UnicastRef.invoke (UnicastRef.java:162) на java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod (RemoteObjectInvocationHandler.java:227) по адресу java.rmi.server.RemoteObjectInvocationHandler.invoke (RemoteObjectInvocationHandler.java:179) в клиентском прокси-сервере com.sun.an.jpg.: 66) Вызвано: java.io.EOFException в java.io.DataInputStream.readByte (DataInputStream.java:267) в sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:215) ... еще 5


Я также пытался отсоединить и удалить объект, но он не будет работать.

Пожалуйста, скажите мне, что я делаю неправильно или что я мог сделать.Буду признателен за любую помощь:)

1 Ответ

0 голосов
/ 23 мая 2018

После короткой задержки он завершает работу в отдельном потоке, чтобы дать время для завершения удаленного метода и отправки его результата обратно.

...