注: この Java 配備ガイドでは、Java SE 6 update 10 リリースより前にリリースされた機能について説明します。最新情報については、Java Rich Internet Application の開発および配備を参照してください。

java.lang.NullPointerException がスローされるスロー元: java.awt.Graphics.drawImage()


症状

Sun Java Runtime Environment (JRE) を使ってブラウザ内でアプレットを実行すると、java.awt.Graphics.drawImage() メソッドで java.lang.NullPointerException がスローされます。同じアプレットが、Microsoft Virtual Machine (VM) の下では何のエラーもなく実行されます。

原因

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

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

Graphics.drawImage() メソッドに null イメージを渡した場合の結果は、明確に定義されていませんでした。Microsoft VM は null イメージを無操作として扱います。ところが、Sun JRE のほとんどのバージョンは null を有効なイメージとして受け入れないため、java.lang.NullPointerException がスローされます。JRE バージョン 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);

詳細情報

        なし。

 


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.