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

java.lang.IllegalArgumentExceptionjava.awt.Color コンストラクタでスローされる


症状

Sun Java Runtime Environment (JRE) 実装を使ってブラウザ内でアプレットを実行すると、java.awt.Color コンストラクタで java.lang.IllegalArgumentException がスローされます。同じアプレットが Microsoft Virtual Machine (VM) では実行できます。

原因

この例外は、Sun JRE で境界値を超えた値や境界値に達しない値が Sun JRE の Color コンストラクタで渡されるために起こります。

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

Color コンストラクタで上限や下限を超える値を渡した場合の結果は、明確に定義されていません。Microsoft VM は、値を最大カラー値や最小カラー値に自動的に再調整します。Sun JRE は java.lang.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);
        }

詳細情報

なし。


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