java.lang.NullPointerExceptionjava.awt.Graphics.drawString() でスローされる


症状

Sun JavaTM Runtime Environment (JRETM) を使ってブラウザ内でアプレットを実行すると、java.awt.Graphics.drawString() メソッド によって java.lang.NullPointerException がスローされます。同じアプレットが Microsoft Virtual Machine (VM) では実行できます。

原因

この例外は、Sun JRE で null 文字列が Graphics.drawString() メソッドに渡されるために起こります。

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

null 文字列を Graphics.drawString() メソッドに渡した場合の結果は詳細に定義されていないため、Microsoft VM では null を空の文字列として扱います。ところが、Sun JRE の実装は null を有効な文字列として受け入れないため、java.lang.NullPointerException が発生します。

解決方法

null 以外の文字列だけが drawString() メソッドに渡されるように対策を講じたコードを記述します。次に例を示します。

Graphics g = getGraphics();
g.drawString(s, 100, 100);

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

Graphics g = getGraphics();
if (s !== null) {

   g.drawString(s, 100, 100);
}

詳細情報

なし