Почему магические значения classLoader в defineClass () выдают исключение? - PullRequest
0 голосов
/ 13 октября 2011

Я хочу написать classLoader, который поможет мне реализовать настраиваемые классы и, в конечном итоге, целый компонент во время выполнения. Сейчас я нахожусь в процессе загрузки класса.

Я пытаюсь загрузить этот файл role.java. Однако, когда я добираюсь до этой части кода:

myClass = super.defineClass(className, classData, 0, classData.length);

Я получаю это исключение:

Исключение в потоке "main" java.lang.ClassFormatError: Несовместимое магическое значение 1885430635 в файле класса C: \ Users \ ARIFAH \ Downloads \ Compressed \ eUML2 бесплатная версия \ с кодом загрузчика классов \ 2 \ archetypedComponentWithNull \ SRC \ аС \ Роль / Java

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at customCL.customClassLoader.loadClass(customClassLoader.java:116)
at java.lang.ClassLoader.loadClass(Unknown Source)
at customCL.customClassLoader.main(customClassLoader.java:145)

Я читал сообщения о том, что "вам нужно что-то вроде OSGi". Это было бы похоже на работу над чем-то новым с нуля, чего я бы хотел избежать.

Почему я получаю эту ошибку?

1 Ответ

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

Вы на самом деле не загружаете файл реального класса.Магическое значение любого допустимого файла класса - 0xCAFEBABE, а это магическое значение в гексах - 0x7061636B.

Обратите внимание, что если мы конвертируем 0x7061636B в байт ASCII, то получается строка«пакет».Это означает, что файл, который вы считаете файлом класса, на самом деле начинается со строки "pack".

...