Подтвердить что ты не робот

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

Ответ 2

Try:

e.printStackTrace(System.out);

Ответ 3

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

Ответ 4

e.printStackTrace();

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

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

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

ИЗМЕНИТЬ См. Первый комментарий ниже для дополнительной информации.

Ответ 5

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

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

Я сам использую (большую часть времени) 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();.

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