2011-11-07 2 views
1

다른 Swing 위젯과 동일한 구조/스타일을 사용하여 새 위젯을 만듭니다. 이를 위해 UI 클래스를 javax.swing.plaf.basic에 넣었습니다. UI 구현의 일부로 javax.swing.plaf.basic.LazyActionMap 클래스를 사용하고 있습니다. 이클립스는 패키지 이름이 같기 때문에이 패키지를 볼 수 있다고 생각하지만, 런타임에는 java.lang.IllegalAccessError 예외가 발생한다 (런타임에는 표시되지 않는 것으로 추정 됨).Swing 패키지에 클래스 추가 - 결과가 표시된 함수의 IllegalAccessError입니다.

내 수업에 동일한 패키지 이름을 부여했지만 Eclipse는 동일한 패키지에 포함되도록 고려하고있는 것처럼 보이지만 런타임에는 그렇지 않습니다.

내가 잘못하고있는 것이 있습니까? 내부 라이브러리 클래스에 대한 가시성을 확보하려는 이유는 위젯의 프로토 타입에 JSlider UI 코드를 다시 사용하기 때문입니다. 앞으로는 처음부터 슬라이더를 그리는 것으로 전환 할 것입니다.

답변

1

다른 클래스 로더를 통해로드 된 클래스는 다른 패키지에 속한 것으로 간주됩니다. 컴파일 할 때 컴파일러는 배포 방법을 알지 못하므로 실수를 볼 수 없습니다. -Xbootclasspath/a:이라는 코드를 시스템 클래스로 추가 할 수는 있습니다.하지만 그 코드는 매우 장난이며 사용자가하지 않아야합니다.

javax 외부의 자신의 패키지에 자신의 클래스를 넣어야합니다. java.* 클래스는 비 부트 스트랩 클래스 로더에 의해로드되지도 않습니다.

+0

감사합니다. :). 그것은 그것을 설명합니다. 나는이 특별한 임시 해킹을 피할 것이라고 생각한다. – kashiko

관련 문제