как обработать Java-код с ошибкой

#java #exception-handling #try-catch

#java #исключение #попробуйте-поймайте

Вопрос:

Я новичок в Java и пытаюсь протестировать / улучшить свою программу.

это работает на моем компьютере, но не на клиентах, поэтому я и пытаюсь выполнить обработку ошибок, но не уверен в синтаксисе.

Как вы помещаете try / catch в for и выполняете циклы while, а также операторы if. будет ли это просто входить в них, как любая другая команда?

 for(int eight = 0; eight < 8; eight  )
            {
                message = in.readLine();
                LOGGER.fatal(eight);
                LOGGER.fatal(message);

                if(message.contains("Content-Length"))
                {
                    message.getChars(16, 20, size, 0); THIS LINE                
                }
            }
  

это пример того, что я использую. как мне добавить try / catch к отмеченной строке.

Или у вас есть лучший способ обработки исключений?

Ответ №1:

как мне добавить try / catch к отмеченной строке.

Если вы не хотите прерывать цикл при возникновении исключения, вы инкапсулируете только отмеченную строку в try / catch.

 for(int eight = 0; eight < 8; eight  ) {

    message = in.readLine();
    LOGGER.fatal(eight);
    LOGGER.fatal(message);

    if(message.contains("Content-Length")) {
        try {
            message.getChars(16, 20, size, 0); THIS LINE                
        } catch (YourException e) {
            // Handle the exception
        }
    }
}
  

Ответ №2:

Просто сделайте это.

 for(int eight = 0; eight < 8; eight  )
            {
                message = in.readLine();
                LOGGER.fatal(eight);
                LOGGER.fatal(message);

                if(message.contains("Content-Length"))
                {   
                   try {
                    message.getChars(16, 20, size, 0); 
                    }
                  catch(Exception e) {
                        // Print all exception messages here ...
                  }
                }
            }
  

Помните: всегда старайтесь использовать определенный класс exception внутри catch вместо ‘Exception’ в качестве хорошей практики программирования.

Ответ №3:

Куда идут ваши строки try / catch, зависит от того, что именно вы хотите обработать.

Возможно, вам захочется обрабатывать все исключения, создаваемые целым методом, одним и тем же способом (например, передавать более читаемую версию в некоторый вывод и / или передавать пользователю значимое сообщение об ошибке) — в этом случае вы должны сделать что-то вроде этого:

 public void method() {
    try {
        // entire method code here
    }
    catch (Exception e) {
        // handle exception here
    }
}
  

В качестве альтернативы, вы можете захотеть обработать исключение, вызванное определенной строкой (например, обработать конкретное исключение, возникающее при открытии файла), и в этом случае вы бы окружили только эту строку своими операторами try / catch.

Ответ №4:

Простой ответ на ваш вопрос таков:

 try {
    for (int eight = 0; eight < 8; eight  ) {
        message = in.readLine();
        if (message.contains("Content-Length")) {
           message.getChars(16, 20, size, 0); THIS LINE                
        }
    }
} catch (StringIndexOutOfBoundsException ex) {
    Logger.fatal("I've got a bug in my program", ex);
}
  

Лучший ответ заключается в том, что вам нужно устранить причину исключений. Бьюсь об заклад, что это код, который пытается извлечь длину содержимого, делает неверные предположения о количестве символов в поле «размер» строки ввода. Более надежный подход — это что-то вроде этого:

     int pos = message.indexOf("Content-Length ");
    if (pos >= 0) {
        String size = message.substring(pos   "Content-Length ".length());
    }
  

Очевидно, что при этом выделяется дополнительная строка, но ее преимущество в том, что ОНА РАБОТАЕТ.

Комментарии:

1. в предыдущей строке этому фрагменту присваивается размер именно так, как вы советуете 🙂

2. @Skeith — если ваш код правильный (как вы, кажется, подразумеваете), почему он выдает исключение?

3. потому что он не получил все сообщение, и это привело к сбою потока. ищу способ обработать ошибку и запросить повторную отправку

4. @Skeith — если ты так говоришь. Честно говоря, я в это не верю, но это ваше дело, не мое.

Ответ №5:

Вы просто окружаете строку (строки), которая может вызвать исключение, try -блоком и перехватываете выданное исключение в catch -блоке. Смотрите руководство по Java