- ベストアンサー
Java初心者がtry-catchでエラーを特定する方法について質問
- 質問内容:java初心者がtry-catchでエラーを特定する方法について教えてください。
- 質問詳細:アプレットで画像を表示させる際に、画像ファイルの存在確認を行い、存在しない場合はエラーメッセージを表示したいです。img1とimg2の変数を使用していますが、どの変数がエラーを起こしたのかを特定する方法があれば教えてください。
- 質問背景:Javaのtry-catchでエラー処理を行う際に、エラーを起こした変数を特定する方法が分からず困っています。冗長なコードが増えるため、効率的な方法があれば教えてほしいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まずはException を System.out.println("エラー" + e + "が返されました"); にしてしまうとtoString()しているだけなので、 System.out.println("エラー" + e.getMessage() + "が返されました"); などにしてちゃんとメッセージを確認してみてはいかがでしょうか。 大体のファイル系のエラーはファイル名が出てきた気がします。 また、「読ませるファイルが存在しない場合」は FileNotFoundExceptionが発生すると思うので、 catchの部分は分けたほうがいいと思います。 try{ //・・・省略 }catch(FileNotFoundException e){ //ファイルがない場合の処理 }catch(Exception e){ //その他の異常処理 } URLは参考までに
その他の回答 (2)
- MVC
- ベストアンサー率42% (3/7)
もし、ファイルが無いことが想定されるのなら、Exception を発生させるのではなく、 処理の前にファイルが存在するかチェックをすべきです。
お礼
こんにちは. 回答ありがとうございます. 参考URLもありがとうございます. ファイルが存在するかどうかをチェックする関数があるのですね.はじめて知りました. ご指摘の通り,処理の前にファイルの存在をチェックする方が,Exceptionを発生させるより良い方法ですね. URL先には他にも今後よく使いそうな関数ばかりでとても勉強になりました. どうもありがとうございます.
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 このやり方が合っているかはわかりませんが、以下のようにするとどの画像でエラーが起きたかわかります。 無駄なクラスだ!ってなるのであれば String error = ""; try { error = "img1"; img1 = getImage(getClass().getResource("img/sample1.jpg")); error = "img2"; img2 = getImage(getClass().getResource("img/sample2.png")); } catch ( Exception e ) { System.out.println ( error + "の読込エラー" ); } のようにするとimg1で例外が発生すればerrorは"img1"、img2のgetImageで例外が発生すればerrorは"img2"になっているのでこれでも判別出来ますね。 ==== ImageInfo.java(画像名とパスを保持するクラス) public class ImageInfo { private String name; private String src; public ImageInfo ( String name, String src ) { this.name = name; this.src = src; } public String getName() { return this.name; } public String getSrc() { return this.src; } } ==== Test.java(メイン) public class Test extends Applet { public Test() { try { ImageInfo imageInfo1 = new ImageInfo("img1","path" ); ImageInfo imageInfo2 = new ImageInfo("img2","path" ); Image img1 = this.loadImage(imageInfo1); Image img2 = this.loadImage(imageInfo2); } catch ( Exception e ) { System.out.println(e.getMessage()); } } private Image loadImage ( ImageInfo imageInfo ) throws Exception { try { return getImage(getClass().getResource(imageInfo.getSrc())); } catch ( Exception e ) { throw new Exception ( imageInfo.getName() + "の読込みに失敗しました。" ); } } }
お礼
こんにちは. 回答ありがとうございます. ソースコード例も載せてくださりとても分かりやすいです! Stringにあらかじめ変数名を入れておくのは楽でいいですね! 参考にさせていただきます.
お礼
こんにちは. 回答ありがとうございます. e.getMessage()は使ったことが無く,初めて知りました. また,参考URLやコード例を示して下さりありがとうございます.とても勉強になります. お二人のおっしゃる通り,exists()の関数を用いようと思います. ありがとうございます.