Javaプログラミングで、例外通知を受け取る書き方
Javaプログラミングで例外通知を受け取る書き方を、知りたいです。
Javaプログラミングで例外を受け取る場合、catch文で例外通知を受け取ります。
そこで例外処理を行ないます。
適切なメソッド内にcatch文を記述して、適切に例外処理を行なってください。
そうしたら、プログラム実行中に例外が発生しても、アプリは正しく動作します。
Javaプログラミングで、メソッド内で例外を受け取る書き方
プログラム実行中に例外が発生した場合、その例外をメソッド内で受け取る書き方があります。
発生した例外を、メソッド内で対処したい(解決したい)場合の書き方です。
「例外処理の流れ」は、以下のようなイメージです。
赤線が「例外処理の流れ」を示します。
例外が発生したメソッド内のcatch文で、例外通知を受け取ります。
そこで例外処理に対処します。

「この例外処理の流れ」は、水平に右方向に行き、そして下方向に行きます。
水平に右方向に行く点が、「正常処理の流れ」と違います。
例外の対処(解決処理)は、メソッド内のcatch文に書きます。
同じメソッド内に「発生した例外」と「その対処」が書かれているので、「例外処理の流れ」を理解しやすいと思います。
try文とcatch文の距離が近いほど、「例外処理の流れ」を理解しやすいです。
メソッド内で例外を受け取る書き方の例
実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

例外は、「ファイルが見つからない」という例外です。
次の文で、その例外を通知します。
throw new Exception("not found file name = " + fileName);
例外の対処は、「ファイルを読み込むことができません」というエラーメッセージを、画面に表示することです。
次の文で、そのエラーメッセージを表示します。
window.showErrorMessage(fileName + jp.Resource.get("canNotReadFile"));
同じメソッド内に、
- 「ファイルが見つからない」という例外と、
- 「エラーメッセージを表示する」という対処が
書かれています。
よって「例外処理の流れ」を理解しやすい、と思います。
Javaプログラミングで、別のメソッドで例外を受け取る書き方
プログラム実行中に例外が発生した場合、その例外を他のメソッドで受け取る書き方があります。
発生した例外について、他のメソッド内で対処したい(解決したい)場合の書き方です。
「例外処理の流れ」は、以下のようなイメージです。
赤線が、「例外処理の流れ」を示します。
例外が発生したメソッドとは別のメソッドにおいて、catch文で例外通知を受け取ります。
別のメソッドのcatch文で、例外処理に対処します。

クラスAのメソッドAから、クラスBのメソッドBを呼び出します。
そのメソッドBにおいて、例外が発生します。
例外の対処(解決処理)は、クラスAのメソッド内にあるcatch文に書きます。
このように例外を通知する場合、メソッドBを呼び出したメソッドAにおいて、メソッドBで発生した例外について対処できます。
もしもメソッドBが、ある2個のメソッドから呼び出された場合、メソッドBの例外について、それら2個のメソッド内で、それぞれで例外の対処を行なえます。
別のメソッドで例外を受け取る書き方の例
実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

次の文で、ExTextFieldクラスのgetValue()メソッドを、呼び出します。
minValueField.getValue();
次の文において、変数textの値が数値に変換できない文字列形式の場合、例外が起きます。
例:変数textが文字列"abc"の場合、例外NumberFormatExceptionが起きます。
Integer.parseInt(text);
その例外は、getValue()メソッドの呼び出し先であるNumericalRangeFieldPanelクラス、getMinValue()メソッドに通知されます。
そのgetMinValue()メソッド内のcatch文において、例外の対処(解決処理)をします。
次の文で例外の対処として、最小の値として1を返す、としています。
例:変数textが文字列"abc"の場合、最小の値として1を返して、プログラム処理を続けます。
return 1;
このgetValue()メソッドのように、例外を他のメソッドに通知する場合、例外の対処は、getValue()メソッドの「それぞれの呼び出し先」で、決めることができます。
例えば別のメソッドにおいて、例外の対処として最小の値100を返す、という風に決められます。
「それぞれの呼び出し先」で例外の対処法を決めたい場合は、このようにプログラムを書くと良いです。
Javaプログラミングで、例外処理を中止する書き方
例外が発生した場合、処理を中止する書き方があります。
その例外により、その後の処理の続行を諦める(ギブアップする)場合の書き方です。
実行中のプログラムでは解決できない問題(例外)が起きた時など、このような書き方をします。
「例外処理の流れ」は、以下のようなイメージです。
赤線が、「例外処理の流れ」を示します。
任意のメソッドにおいて、catch文で例外通知を受け取ります。
そこで、例外処理を中止します。

この「例外処理の流れ」は、水平に右方向に行き、そして下方向に行きます。
そしてcatch文に来ます。
しかし、ここでは例外に対処することを諦めて、再び例外を通知します。
例:RuntimeExceptionを通知します。
このRuntimeExceptionは、受け止める(catchする)必要がない例外です。
このような受け止める必要がない例外を通知することによって、例外に対処することを諦めます。
例外処理を中止する書き方の例
実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

次の文で、SAX Perserのオブジェクトを作成します。
factory.newSAXParser();
もしも、そのオブジェクトの作成に失敗した場合は、例外が通知されて、処理がcatch文に来ます。
このSAX Perserオブジェクトの作成が失敗する原因は、プログラムの実行環境にあります(ほとんどの場合で実行環境に原因がある、と言えます)。
実行環境に原因があるため、実行中のプログラムは「その例外(問題)」を解決できません。
よって次の文で例外を通知して、処理の続行を諦めます。
throw new RuntimeException("could not create SAX Parser", cause);
SAX Perserオブジェクト作成失敗という例外を、解決する方法
SAX Perserオブジェクト作成失敗という例外を解決する方法は、
例えばsaxParser.jarファイル(仮名)を、適切なディレクトリ内にコピーする、という方法です。
例えば実行中のプログラムが、どこからかsaxParser.jarファイルを探し出して、適切なディレクトリ内にコピーすることになります。
ただし、このような処理をすることは困難だと思います。
もしかしたらプログラムのインストール時、ハードディスク内にsaxParser.jarファイルをコピーし忘れているかもしれないからです。
※この記事は、2004年6月当時の記事になります。