NullPointerExceptionjava.awt.Graphics.drawImage() でスローされる


症状

アプレットを Sun JRE を使用したブラウザで実行している場合、NullPointerExceptionjava.awt.Graphics.drawImage メソッドでスローされます。同じアプレットが Microsoft VM では実行できます。

原因

この例外は、Sun JRE で null イメージが drawImage メソッドに渡されるために起こります。

Sun JRE の Java クラスライブラリは時間の経過とともに変化してきました。詳細になった API もあれば、廃止された API もあります。また、実装が変更された API もあります。

null イメージを Graphics.drawImage メソッドに渡した場合の結果は詳細に定義されていないため、Microsoft VM では null イメージを無操作として扱います。しかし、Sun JRE のほとんどのバージョンでは null を有効なイメージとして許容しないため、NullPointerException がスローされます。5.0 では仕様が詳細化され、null イメージの引数は無操作として扱われます。

解決方法

5.0 以前のバージョンの JRE では、null 以外のイメージだけが drawImage メソッドに渡されるように対策を講じたコードを記述します。例を示します。

        Graphics g = getGraphics();
    g.drawImage(img, 100, 100, this);

        このコードを次のように変更します。

        Graphics g = getGraphics();
        if (img != null)
            g.drawImage(img, 100, 100, this);

詳細情報

なし