Использование e. printStackTrace () в Java


Это, вероятно, вопрос новичка, но надеюсь, что вы можете мне помочь. :) У меня есть что-то вроде этого:

try
{ 
//try to do something there
}
catch (IOException e)
{
//handle the exception 
e.printStackTrace();
}

Я использую IDE NetBeans, и по какой-то причине printStackTrace подчеркнут волнистой линией. Когда я нажимаю Alt + Enter, он говорит Throwable.printStackTrace () должен быть удален. Что это значит? Может ли кто-нибудь дать больше информации о том, что это может означать? Или я могу игнорировать это?

спасибо!

5 57

5 ответов:

Это просто рекомендация. В eclipse это нормально-я считаю, что это просто IDE говорит вам, что есть более обычные методы этого, как и некоторые другие ответы. Я считаю, что это полезно для отладки, и что вы должны сообщить пользователям, когда произойдет фатальная ошибка, чтобы использовать режим отладки (например, консольный коммутатор-d) для сбора этих журналов.

попробуй:

e.printStackTrace(System.out);

Это, наверное, потому что printStackTrace() на самом деле не обрабатывает ошибку столько, сколько просто сбрасывает стек в консоли. Он действует как заполнитель, пока вы не замените его правильной обработкой ошибок (если это вообще необходимо) и не замените вывод каким-либо регистратором.

Эл.печатные();

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

NetBeans должен предупредить вас об этом. Хорошая практика об этом, регистрирует сообщение. Следуйте той же ссылке:

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

EDIT См. Первый комментарий ниже для получения дополнительной информации.

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

всегда регистрировать исключения(используя хороший logging framework), но не подвергайте их воздействию конечного пользователя. И следите за тем, чтобы показывать трассировки стека только в режиме разработки.

Я сам использую (большую часть времени) logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);.

когда netbeans предлагает вам обработать исключение'Surround Statement with try-catch', Если вы нажмете на эту, он будет генерировать):

try {
    //something need to be handle(exception that throw)
} catch (SQLException ex) {
    Logger.getLogger(ClassName.class.getName()).log(Level.SEVERE, null, ex);
}

лучше, чем ex.printStackTrace();.

это может помочь: