例外処理

エラー

以下の記事で、正方形を描写するプログラムを書きました。

>>正方形を描写するプログラムの記事

この際に、入力に数字を入れないと以下のようなエラーが生じます。

エラー

このエラーを回避するために、例外処理というのをプログラムに追加します。

以前のプログラム

まず、以前のプログラムを以下に載せます。

    private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        //正方形の1辺の長さを取得
        String str=txtField.getText();
        int l=Integer.parseInt(str);

        //画像の準備
        Image img=createImage(250,250);
        Graphics g=img.getGraphics();
        //描写の開始
        g.setColor(Color.BLUE);
        g.fillRect(0,0,l,l);
        g.dispose();
        //ラベルに画像をかく
        ImageIcon icon=new ImageIcon(img);
        label.setIcon(icon);
    }

このプログラムのいけないところはstrが数字でない可能性があるということです。

改良したプログラム

そこで、以下のように例外処理をいれました。

    private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        //正方形の1辺の長さを取得
        String str=txtField.getText();
        int l;
        try{
            l=Integer.parseInt(str);
        }catch(NumberFormatException ex){
            return;
        }

        //画像の準備
        Image img=createImage(250,250);
        Graphics g=img.getGraphics();
        //描写の開始
        g.setColor(Color.BLUE);
        g.fillRect(0,0,l,l);
        g.dispose();
        //ラベルに画像をかく
        ImageIcon icon=new ImageIcon(img);
        label.setIcon(icon);
    }

例外が生じると「return」により実行が終わります。

これでエラーが起きなくなります。

例外処理の構文は以下のようになります。

try{
     例外が発生する可能性のある処理
}catch(処理したい例外の型 引数){
     例外が発生したときの処理
}

例外が生じる部分で使ってみるといいでしょう。

例外処理はNumberFormatExceptionの他にも、配列の範囲外となる例外のArrayIndexOutOfBoundsExceptionがあります。

例外の種類によって使い分けましょう。

著者:安井 真人(やすい まさと)