Добавление класса в пакет Swing - результатом является IllegalAccessError для видимой функции - PullRequest
1 голос
/ 07 ноября 2011

Я создаю новый виджет, используя ту же структуру / стиль, что и другие виджеты Swing. Для этого я поместил свой класс пользовательского интерфейса в javax.swing.plaf.basic. В качестве части моей реализации пользовательского интерфейса я использую класс javax.swing.plaf.basic.LazyActionMap. Eclipse считает его видимым, поскольку он имеет то же имя пакета, однако во время выполнения я получаю исключение java.lang.IllegalAccessError (предположительно, он не виден во время выполнения).

Кажется, что, хотя я дал моему классу одно и то же имя пакета, и Eclipse считает, что они находятся в одном пакете, во время выполнения они не совпадают.

Что-то я делаю неправильно? Причина, по которой я пытаюсь видеть внутренние классы библиотеки, заключается в том, что для прототипа виджета я повторно использую код пользовательского интерфейса JSlider. В будущем я перейду к рисованию слайдера с нуля.

1 Ответ

1 голос
/ 07 ноября 2011

Классы, загруженные через другой загрузчик классов, считаются принадлежащими различным пакетам. Во время компиляции ваш компилятор не будет знать, как вы собираетесь развертывать, поэтому не может увидеть ошибку. Вы можете добавить код как системные классы с -Xbootclasspath/a:, но это очень непослушно, и вы не должны этого делать.

Вы должны поместить свои собственные классы в свои собственные пакеты, далеко за пределами javax. java.* классы даже не загружаются загрузчиками классов без начальной загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...