こんにちは.
java初心者です.
try~catchでエラー処理を行うことについて質問です.
try~catchでは,エラーを起こした変数を特定することは出来ないのでしょうか?
例えばアプレットで画像を表示させる下記のコードについて,
img1とimg2の変数を使いますが,img1に読ませるファイルは存在するが
img2に読ませるファイルが存在しない場合に,「img2に読み込ませるファイルが存在しません」と表示したいのです.
このようにどの変数がエラーを起こしたかを特定することはできますか?
==============
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Sample extends Applet{
Image img1, img2;
int x=0, y=0;
public void init() {
System.out.println("init");
try{
img1 = getImage(getClass().getResource("img/sample1.jpg"));
img2 = getImage(getClass().getResource("img/sample2.png"));
}
catch(Exception e){
System.out.println("エラー" + e + "が返されました.");
}
}
public void paint(Graphics g){
g.drawImage(img1, 0, 0, this);
g.drawImage(img2, 50, 50, this);
}
}
==============
try{
img1に関する処理
}
catch(Exception e){
img1に関するエラー処理
}
try{
img2に関する処理
}
catch(Exception e){
img2に関するエラー処理
}
とやればできそうですが,あまりに冗長なので他に方法があると思うのですが…
自分もまだ勉強しはじめたばかりなので,初歩的な質問で恐縮です.
教本やネットで調べても分からなかったので質問させていただきました.
よろしくお願いいたします.
No.1
- 回答日時:
こんにちは。
このやり方が合っているかはわかりませんが、以下のようにするとどの画像でエラーが起きたかわかります。
無駄なクラスだ!ってなるのであれば
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にあらかじめ変数名を入れておくのは楽でいいですね!
参考にさせていただきます.
No.2
- 回答日時:
もし、ファイルが無いことが想定されるのなら、Exception を発生させるのではなく、
処理の前にファイルが存在するかチェックをすべきです。
参考URL:http://docs.oracle.com/javase/jp/6/api/java/io/F …
こんにちは.
回答ありがとうございます.
参考URLもありがとうございます.
ファイルが存在するかどうかをチェックする関数があるのですね.はじめて知りました.
ご指摘の通り,処理の前にファイルの存在をチェックする方が,Exceptionを発生させるより良い方法ですね.
URL先には他にも今後よく使いそうな関数ばかりでとても勉強になりました.
どうもありがとうございます.
No.3ベストアンサー
- 回答日時:
まずはException を
System.out.println("エラー" + e + "が返されました");
にしてしまうとtoString()しているだけなので、
System.out.println("エラー" + e.getMessage() + "が返されました");
などにしてちゃんとメッセージを確認してみてはいかがでしょうか。
大体のファイル系のエラーはファイル名が出てきた気がします。
また、「読ませるファイルが存在しない場合」は
FileNotFoundExceptionが発生すると思うので、
catchの部分は分けたほうがいいと思います。
try{
//・・・省略
}catch(FileNotFoundException e){
//ファイルがない場合の処理
}catch(Exception e){
//その他の異常処理
}
URLは参考までに
参考URL:http://www7a.biglobe.ne.jp/~java-master/samples/ …
こんにちは.
回答ありがとうございます.
e.getMessage()は使ったことが無く,初めて知りました.
また,参考URLやコード例を示して下さりありがとうございます.とても勉強になります.
お二人のおっしゃる通り,exists()の関数を用いようと思います.
ありがとうございます.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- Java すみません。助けてください。 javaについての質問です。 integerに変換できない数値をエラー 5 2022/05/18 19:16
- Excel(エクセル) セル内の一部に別セルを差し込む 3 2022/09/18 04:39
- 工学 制御工学の問題について 1 2022/10/22 17:42
- 工学 制御工学の問題について 1 2022/10/22 17:44
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- 工学 制御工学の問題について 1 2022/10/22 11:06
- 地球科学 長万部町の神社付近地中から30メートル高の水柱が噴出。 2 2022/08/14 22:26
- 数学 (4)のim(T)をu1,u2,u3の線型結合で表せ、という問題がわからないです。回答を見ると私の解 2 2023/05/31 22:14
- 英語 Im so happy really with all my hearth for yours wo 3 2022/06/12 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
コンパイル時にエラーが出てし...
-
タグが閉じてないというエラー...
-
Eclipseで次のエラー箇所にジャ...
-
javaでEnumerationを使いたいの...
-
エラー:org.springframeworkが...
-
シンボルが見つかりませんとい...
-
eclipseをバージョンアップした...
-
Java エスケープ文字
-
致命的: StandardServer.await:...
-
java エラー
-
マイクラでBuildcraftを入れる...
-
正規表現で入力チェックするには。
-
JSP/サーブレットで一般的な入...
-
tomcat起動時エラー
-
java.lang.IllegalArgumentExce...
-
java eclipse キーボード入力
-
DataSetのFilter
-
JSP内でString型からint型に変...
-
JAVAでアルファベットを数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
エラー:org.springframeworkが...
-
tomcat起動時エラー
-
Javaのエラーについてです
-
タグが閉じてないというエラー...
-
コンパイル時にエラーが出てし...
-
構文エラーのやり直しについて
-
eclipseをバージョンアップした...
-
eclipseでのsvn認証エラー回避方法
-
Eclipseで次のエラー箇所にジャ...
-
JBossについて
-
JSPの表示時エラー
-
「型 ArrayList は総称ではあり...
-
Win32コンソールアプリでnamesp...
-
Eclipseの環境について
-
致命的: StandardServer.await:...
-
javaw.exeプロセスが正常起動し...
-
getParameterについて
-
JSP内でString型からint型に変...
おすすめ情報