Использование e.printStackTrace () в Java - PullRequest
59 голосов
/ 18 августа 2011

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

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

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

Спасибо!

Ответы [ 5 ]

41 голосов
/ 18 августа 2011

Попробуйте:

e.printStackTrace(System.out);
21 голосов
/ 18 августа 2011

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

14 голосов
/ 18 августа 2011

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

9 голосов
/ 18 августа 2011

e.printStackTrace (); * +1002 *

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

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

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

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

3 голосов
/ 06 августа 2017

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

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

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

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

...