web-dev-qa-db-ja.com

Javaでe.printStackTrace()を使用する

これはおそらく初心者の質問ですが、あなたが私を助けてくれることを願っています。 :)私はこのようなものを持っています:

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

NetBeans IDEを使用していますが、何らかの理由でprintStackTraceに波線が引かれています。 Alt + Enterを押すと、Throwable.printStackTrace()を削除する必要があります。これは何を意味するのでしょうか?これが何を意味するのかについて、誰かがより多くの洞察を与えることができますか?または、これを無視できますか?

ありがとう!

60
O_O

これは単なる推奨事項です。 Eclipseではそれは問題ありません-他の答えのいくつかのように、それを行うより従来の方法があることを伝えるIDEであると信じています。致命的なエラーがいつ発生するかをユーザーに伝え、デバッグモード(コンソールスイッチ-dなど)を使用してこれらのログを収集する必要があります。

21
Mgamerz

試してください:

e.printStackTrace(System.out);
42
Pablo Fernandez

printStackTrace()が実際にエラーを処理しないのは、単にコンソールにスタックをダンプするだけだからでしょう。適切なエラー処理(必要な場合)に置き換え、出力を何らかのロガーに置き換えるまで、プレースホルダーとして機能します。

14
dee-see

e.printStackTrace();

デフォルトのErrorStream(ほとんどの場合はコンソール)で印刷されるため、お勧めしません!

NetBeansはそれについて警告しているはずです。それについての良い習慣は、メッセージを記録することです。同じ参照に従ってください:

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

[〜#〜] edit [〜#〜]詳細については、以下の最初のコメントを参照してください。

10
Arthur Neves

スタックトレースを印刷するだけでは不十分です。例外のスタックトレースを印刷すること自体が完全に悪いことではありませんが、例外が発生したときにスタックトレースのみを印刷することは問題です。

常に例外をログに記録します(適切な ロギングフレームワーク を使用します)が、例外をエンドユーザーに公開しないでください。また、開発モードでのみスタックトレースを表示するようにしてください。

私自身は(ほとんどの場合)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();よりも優れています。

これらが役立つ場合があります。

3
Blasanka