どう

2016-04-01 8 views
0

私は私の個人的なライブラリを書いてきたと私は別のプログラムで使用されるこのコードを実装しようとしてきたカスタムライブラリの例外を処理しますどう

私はこのコードを自分のライブラリに正しく実装する必要がありますか?

public ImagePanel(String imgpath) throws IOException { 
    image = ImageIO.read(new File(imgpath)); 
} 

これは私のライブラリを別のプログラムで使用する方法です。

import testlib.ImagePanel; 
ImagePanel boardPanel = null; 
try { 
    ImagePanel boardPanel = new ImagePanel("imageexample.png"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
// do stuff here (boardPanel is "null" above because I've gotten an error that it's not initialized as I do that in the try/catch block) 
+3

これは特定の動作に近づいています。しかし、コンストラクタから例外をスローすることにはいくつかの議論があります。オブジェクトのインスタンス化とイメージの読み込み/取り出しの呼び出しを分離し、 'getImage(String imgpath)throws IOException'メソッドを追加するほうが良いかもしれません。 – KevinO

答えて

0

IMOそれを処理するための最良の方法は、(エラー、すなわちnew Error(e)をIOExceptionがラップし、エラーをスローするだろう。そこにかないというファイルが本当にランタイムを必要とするため再度、IMOこれは正当化される、ではありませんA時間の修正をコンパイルします。そして、この方法は、あなたが、例外が発生した場合は、nullを返すことができます

public ImagePanel(String imgpath) { 
    try { 
    image = ImageIO.read(new File(imgpath)); 
    } 
    catch (IOException e) { 
    throw new Error(e); 
    } 
} 
+0

か、 'RuntimeException'を使用してください。これもチェックされていません。 – fgb

+0

IOExceptionをラップすることをどのように提案しますか?私の図書館のコードでそれをキャッチし、 '新しいエラー'を投げますか? – Aaron

+0

@アーロン私は私がそれをやる方法を示すために私の答えを更新しました – ControlAltDel

-1

のように、コンストラクタで例外を宣言する必要はありません。これは、プログラムがクラッシュすることはありません。

をしかし、例外をスローすると、プログラムがクラッシュする可能性がありますユーザーが「キャッチ」しない場合、ラム

public ImagePanel(String imgpath) throws IOException{ 
try { 
    image = ImageIO.read(new File(imgpath)); 
catch (IOException e) { 
    // handle exception 
    throw new IOException(); 
    } 
}