java.lang.IllegalArgumentException が java.awt.Color コンストラクタでスローされるアプレットを Sun JRE を使用したブラウザで実行している場合、
IllegalArgumentExceptionがjava.awt.Colorコンストラクタでスローされます。同じアプレットが Microsoft VM では実行できます。
この例外は、Sun JRE で境界値を超えた値や境界値に達しない値が Sun JRE の
Colorコンストラクタで渡されるために起こります。Sun JRE の Java クラスライブラリは時間の経過とともに変化してきました。詳細になった API もあれば、廃止された API もあります。また、実装が変更された API もあります。
範囲外の値を
Colorコンストラクタに渡した場合の結果は詳細に定義されていないため、Microsoft VM では値を最大のカラー値や最小のカラー値に自動的に再調整します。Sun JRE では別のアプローチをとっており、IllegalArgumentExceptionを使用して、範囲外の値を指定したことをプログラマに通知します。
有効なカラー値だけが
Colorコンストラクタに渡されるように対策を講じたコードを記述します。次に例を示します。void Color newColor(int r, int g, int b) { return new Color(r, g, b); }このコードを次のように変更します。
int ensureColorRange(int v)
{
if (v < 0)
return 0;
else if (v > 255)
return 255;
else
return v;
}
void Color newColor(int r, int g, int b)
{
r = ensureColorRange(r);
g = ensureColorRange(g);
b = ensureColorRange(b);
return new Color(r, g, b);
}
なし