#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