Как разрешить только определенное количество исключений ввода-вывода? - PullRequest
0 голосов
/ 02 июля 2018

Мне интересно, есть ли хороший и стандартный способ разрешить только определенное количество исключений ввода-вывода (тайм-аут соединения и т. Д.), Прежде чем вы прекратите попытки и, возможно, отправите автоматическое электронное письмо, чтобы сообщить кому-то, что есть проблема. Я могу придумать уродливый способ сделать это с помощью блока try catch, который хранит счетчик и проверяет значение этого счетчика перед попыткой. Есть ли более стандартный, более приятный способ реализовать это?

1 Ответ

0 голосов
/ 02 июля 2018

Просто создайте переменную «no», которая будет действовать как счетчик:

int counter = 0;
while (true){
    try{
        // do something
        break;
    } catch (IOException e) {
        e.printStackTrace();
        counter++;

        if (counter >= 10)
            throw new RuntimeException(e);
    }
}

Он поймает исключение, напечатает трассировку стека и перезапустит исключение, только если счетчик превысит 10. Часть отправки электронной почты будет более сложной по нескольким причинам:

  • Вам нужна библиотека для отправки писем (AFAIK)
  • Вам необходимо настроить почтовый сервер
  • Вам необходимо пройти аутентификацию на сервере (пользователь должен либо ввести пароль, либо вам нужно жестко ввести пароль -> плохая практика)
  • Возможной причиной IOException может быть то, что аппарат не подключен к Интернету. В этом случае отправка электронной почты также будет неудачной.
...