java.lang.IllegalArgumentException 가 java.awt.Color 생성자 으로 throw 된다... - xrath.com 에서 번역됨

## `java.lang.IllegalArgumentException` 가 `java.awt.Color` 생성자 으로 throw 된다

###
증상

> 애플릿을 Sun JRE 를 사용한 브라우저로 실행하고 있는 경우,`IllegalArgumentException` 가 `java.awt.Color` 생성자 으로 throw 됩니다. 같은 애플릿이 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);
            }

### 상세 정보

없음