Classloader генерирует ClassDefNotFoundError при загрузке одного класса, но не других классов. Что не так с этим конкретным классом? - PullRequest
0 голосов
/ 26 апреля 2019

Я расспросил и огляделся большую часть месяца, и я просто не могу найти решение.

Хорошо, поэтому мне нужна помощь от кого-то, кто раньше использовал загрузчики Java Class.В частности, кто-то, кто имел дело с тем, что класс находится в jar-файле, но он выдает исключение ClassDefNotFound.

По сути, я пытаюсь создать загрузчик плагинов для моего проекта (https://github.com/CloudGamer360/Project-ArchT5 - см. Ветку «Разработка» для получения последнего кода), поэтому единственной важной вещью здесь должен быть класс net.cloudsbots.archseriest.archt5.plugin.PluginManager.Я сделал плагин, который прекрасно работает с ним в прошлом без ошибок, поэтому я чувствую, что мой загрузчик плагинов в порядке, но я не знаю, может быть, я пропустил что-то, так как плагин, который работал намного меньше и менее сложно.

Во всяком случае, я думаю, что проблема в том, что я не знаю, пока после множества неудачных исправлений есть сам плагин.Названный ArcadeT5, это плагин игрового «движка» для моего проекта ArchT5, предназначенный для облегчения разработки игр для бота.(Находится здесь https://github.com/CloudGamer360/ArcadeT5) Я получаю несколько его классов для загрузки, перебирая файл jar, пока не дойдет до загрузки класса net.cloudsbots.arcadet5.games.Game, в котором он выдает ClassDefNotFoundИсключение в PluginManager по вызову defineclass() (строка 177 в разработке)

Скриншоты журнала:

1 Ответ

0 голосов
/ 27 апреля 2019

Разобрался сам, заметив что-то с загрузчиком. Похоже, что если класс наследует другой класс, который не был загружен, он выдаст NoClassDefFoundError.

Если вы создаете собственный загрузчик классов, который вызывает такие методы, как 'defineClass', обязательно перехватывайте любые NoClassDefFoundError исключения и загружайте необходимые классы, так как это избавит вас от нескольких головных болей.

...