как обрабатывать ошибки Java-код - PullRequest
0 голосов
/ 23 мая 2011

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

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

Как использовать циклы try / catch для for и do, а также операторы 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 к отмеченной строке.

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

Ответы [ 5 ]

1 голос
/ 23 мая 2011

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

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

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

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

1 голос
/ 23 мая 2011

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

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 голос
/ 23 мая 2011

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

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 ...
                  }
                }
            }

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

1 голос
/ 23 мая 2011

как добавить попытку / улов к отмеченной строке.

Если вы не хотите выходить изВ цикле при исключении вы инкапсулируете только отмеченную строку в 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
        }
    }
}
0 голосов
/ 23 мая 2011

Вы просто окружаете строки, которые могут генерировать исключение, с помощью try -блока и ловите выброшенное исключение в catch -блоке. См. Учебник по Java

...