プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。いつもお世話になっております。

エラー処理として、エラークラス.printStackTrace()とすれば、エラーがコンソールに表示されますが、そのコンソールに表示されるものを、String型変数に代入したいのですが、どうすればよいんでしょうか?

ドキュメントを見て、

String str = getStackTrace().toString();

としてみたのですが、うまく取得できません。誰か方法のわかる方は返事をください。よろしくお願いします。

A 回答 (3件)

コンソールに出力される文字列をそのまま取得したいのなら、こんな感じでどうでしょう?(試してません)



(import java.io.*;)

StringWriter writer = new StringWriter();
PrintWriter writer2 = new PrintWriter(writer);
exceptionObject.printStackTrace(writer2);
writer2.flush();
String string = writer.toString();

getStackTrace() を使っても出来なくはないと思いますが、もっと面倒になると思います。
    • good
    • 0
この回答へのお礼

どうも、ご返事ありがとうございます。

StringWriterですか。j2sdk1.4から利用できるようになったクラスですよね。まだ使ったことがないんですが。。。

exceptionObjectを使えばよいのですね。なんとなくわかったような気がします。

会社のプログラムで、月曜日までに調べなくてはいけないのです。

とても助かりました。早速試してみようと思います。ありがとうございました。

お礼日時:2003/01/18 21:39

StringWriterは1.4から使えるようになったクラスではありませんよ。


1.1から使えます。(とAPIリファレンスに書いてあります)
したがってUKYさんが回答した内容こそが、JDKのバージョンをあまり問わずに
使用できる、万能な方法です。
逆に、kamkamkam3さんが質問された、getStackTrace()を使用する方法は、
JDK1.4から使えるようになった機能です。

getStackTrace()は、StackTraceElementの配列を返します。
ちょうど、printStackTrace()を実行したときの1行分の情報が配列の1要素になっているイメージです。
配列を返すので、それをtoString()しても欲しい情報が得られなかったのだと思います。
こんな感じで取り出した配列から1つずつ望みの情報を取り出してください。
StackTraceElement[] ary = e.getStackTrace(); //eはExceptionクラス
for (int i = 0; i < ary.length; i++){
  System.out.println(ary[i].getFileName());
}
JDK1.4から使えるようになった機能ですが、スタックトレースの各要素について
行番号や、ファイル名、メソッド名などが自由にとりだせるので、
そういった細かい情報が必要であれば、便利だと思います。
(StringWriterを使ってファイル名や行番号の情報を取り出すのは面倒なので)
単にスタックトレース全体のテキストデータを取得したいのであれば、
UKYさんが書いた方法の方が楽です。

StackTraceElementについては、APIリファレンスを参考にしてください。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

お礼が遅れてしまい大変申し訳ございません。

StackTraceElementというのは、配列なんですね。大変わかりやすく、とても助かりました。

どうもありがとうございました。

お礼日時:2003/01/25 14:00

「exceptionObjectを使えばよいのですね。

」と書かれているので誤解なきよう言っておきますが、exceptionObject はただ単に例外オブジェクトに対する変数をそのような名前にしただけで、ExceptionObject なるクラスが存在するわけではありませんので念のため。

例えば例外を

catch (Exception e) .....

のようにキャッチしたときは、

e.printStackTrace(writer2);

のように置き換えてください。
    • good
    • 0
この回答へのお礼

exceptionObjectはてっきり、そういうクラスが存在するのかな、、、と思っておりました。ナイスなフォローをどうもありがとうございます。

Javaはいろいろな方法があるのですね。とても、すごいなぁと思っています。

ここの方たちは、よくいろんなことを知っていますね。私の周りは、Javaの人間がいないため、とても助かります。

お2名の手助けで、問題が解決でき、なおかつ勉強になりました。どうもありがとうございました。またよろしくお願いいたします。

お礼日時:2003/01/25 14:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!