2013-03-13 2 views
-1

Если у меня есть 3 класса с именем A, B, C, и все исключения централизованы в классе A, а A является родительским классом, B - это дочерний класс A, а C является дочерним классом B. now, если какое-либо приложение определенное исключение происходит в классе C, тогда он бросает это исключение в класс B, а класс B бросает класс A, чтобы сделать исключение централизованным. Теперь как мы можем получить Exception Trace в классе A, который активируется классом C.централизовать обработку excpetion

+3

Не могли бы вы предоставить какой-то код, излагающий проблему? Ваше описание немного запутанно. – Henrik

+0

http://stackoverflow.com/a/11925477/139010 –

ответ

0

Вы может получить стек и узнать его, Throwable#getStackTrace() предоставляет информацию о стеке в виде массива элементов трассировки стека, каждый из которых представляет один стек кадра.

Ans this StackTraceElement содержит LineNumber, имя метода, имя класса, в котором он был выполнен. Таким образом, вы сможете узнать, где он действительно брошен.

0

Простой. Определить метод, который может обрабатывать исключение в родительском классе А.

В производных классах,

public void method(){ 
    try{ 
     //code 
    }catch(Exception e){ 
     super.catchExceptionMethod(e); 
    } 
} 
1

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

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

try { 
    ... 
} catch (RuntimeException e) { throw e; } 
    catch (Exception e) { throw new RuntimeException(e); } 

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

И, наконец, если вы сделаете так, как описано, у вас всегда будет сохранена исходная трассировка стека: либо непосредственно в пойманном исключении, либо в исключении, которое может быть получено .getCause(). Если вы просто сделаете printStackTrace() или log.error("error", e), вы получите целую цепочку причин автоматически.

Смежные вопросы