- PR -

自作Exceptionがおかしい?

1
投稿者投稿内容
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-18 20:19
いつも大変御世話になっております。
以下のようなソースで例外が発生したときExceptionから自作のAAAExceptionを作ってそれをthrowしているのですが、throwするところでJavaVMが異常終了してしまいます。
このようなことはしてはいけないのでしょうか?
(AAAExceptionはExceptionから派生した自作クラスです。)

try {
:
}
catch (Exception e) {
AAAException ae = new AAAException(4, 0, e.getMessage());
throw ae; /// ここで異常終了
}
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-11-18 20:24
こんばんわ。

この throw(例外) を受け取る(catchする)プログラムは用意されていますか?
たとえば、これが main プログラムですと、
VMに直接に 例外が投げられると思います。

takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-11-19 02:19
引用:

throwするところでJavaVMが異常終了してしまいます


ん?「異常終了」って例えばどんな状態なんでしょうか?
私の環境では(J2SDK1.4)では予想外な結果はでませんでしたよ。
自作のAAAExceptionがjava.lang.Exceptionを継承している限りには
不適切な例外処理記述ではコンパイル段階で警告を受けるはずですし、
もしmainメソッドからthrowsキーワードでmainメソッド呼び出し側に例外
がスローされたとしても、スタックトレースが表示されるだけです。
それをして「異常終了」というならばかなり無理がある気がします。
だって、意図してそう命令しているわけですから。
Same
会議室デビュー日: 2004/11/05
投稿数: 8
お住まい・勤務地: 鹿児島
投稿日時: 2004-11-19 05:24
引用:

throw ae; /// ここで異常終了



ここで異常終了するってことがわかるってことは、
スタックトレースが表示されてるんでしょうね。

だとしたら、takamaroさんがおっしゃるように予想外のことではないです。
もう少し何がしたいのか書いていただければ、
意図していることにお答えできるかもしれません。

呼び出し元のメソッドか、その呼び出し元、・・・
あるいは大元のmainメソッドでcatchできなければ、
JavaVMは終了してしまいます。

try {
method(); // 例外が生じる可能性があるところ
} catch(AAException e) {
// 例外処理
}
hiro-ta
ベテラン
会議室デビュー日: 2003/09/03
投稿数: 79
投稿日時: 2004-11-19 15:03
皆様、お返事ありがとうございます。
JNI(Java Native Interface)からCallIntMethodでこの関数を呼び出していたことが原因でした。
JNI側でJavaのExceptionをキャッチする方法が分からないため結局例外にはせずにエラーコードをリターンするように作り直しました。
1

スキルアップ/キャリアアップ(JOB@IT)