продолжить мое заявление, когда возникает исключение - PullRequest
1 голос
/ 19 октября 2010

Коды:

String[] logs={"a","b","c"};
int errors=0;
for(String str:logs){
  try{
    LogParser.parse(str);
  } catch(ParseException e){
    error++;
    continue;  // Seems that, this two line codes are not reached.
  }
}

В приведенных выше кодах LogParser используется для анализа журнала tomcat комбинированного шаблона, когда я получаю данные формата даты, я использую SimpleDateFormat для анализа его в Java.Util.Date, затем он может выдать ParseException. Массив logs здесь просто используется для создания исключения.

Однако, когда это исключение возникает при анализе одного журнала, приложение завершает работу, я хочу, чтобы оно ограничивалоследующий журнал.

Как это сделать?

Я прочитал учебник по адресу:

http://download.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html.

Там говорится, что Error и RuntimeException являютсяне подчиняясь блоку try catch, приложение все равно закроется.

Но исключение java.text.ParseException расширяет исключение, почему оно не может быть объектом моего блока try-catch?Поскольку переменная «error» не равна + 1,

, я подумал использовать это:

finally{
  error++;
  continue;
}

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

Может кто-нибудь сказать мне, почему?

Ответы [ 2 ]

5 голосов
/ 19 октября 2010

Вы ловите ParseException, но, вероятно, выдается другой тип исключения.Попробуйте заменить это на (Exception e) и посмотрите, какой тип вы выбрасываете.Затем вы можете уменьшить область действия улова до соответствующего типа исключения.

String[] logs={"a","b","c"};
int errors=0;
for(String str:logs){
  try{
    LogParser.parse(str);
  } catch(Exception e){ // <-- try this
    error++;
    continue;
  }
}
3 голосов
/ 19 октября 2010

Алекс прав.Программа выдает исключение другого типа, а не ParseException, который вы пытаетесь отловить.Однако вместо перехвата Exception e вы можете попытаться перехватить несколько исключений, начиная с самого конкретного.Например:

String[] logs={"a","b","c"};
    int errors=0;
    for(String str:logs){
      try{
        LogParser.parse(str);
      } catch(ParseException e){
        error++;
        continue;
      }
        catch(Exception e){
        //Code to catch generic exception
      }
    }

Вы можете иметь столько операторов catch, сколько пожелаете, но помните, что будет использоваться первое соответствующее совпадение, поэтому не ставьте catch(Exception e) на первое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...