У меня есть программа, где я компилирую код Java, который кто-то пишет в текстовое поле, и запускаю его.
Они печатают полный исходный код, класс и все
Я сохраняю класс, который они пишут, в произвольный исходный файл Java, а затем компилирую и загружаю класс через загрузчик классов. Это отлично работает.
У меня появилась новая проблема, связанная с подклассами. Я даю внешнему классу уникальное имя и загружаю этот класс.
Ex.
TEMP1110.java -> TEMP1110.class
и т. Д.
С внутренними классами он компилируется в TEMP1110$InnerClass.class
Я пытаюсь загрузить этот класс через мой загрузчик классов, но когда внешний класс вызывает его: new InnerClass().method();
это дает мне это: java.lang.NoClassDefFoundError: TEMP1110$InnerClass
Есть какая-то странность или я что-то не так делаю?
Мой загрузчик классов:
private static class JClassLoader extends ClassLoader {
public Class buildClass(final byte[] data, final String className) {
return (Class) defineClass(className, data, 0, data.length);
}
}
className
- TEMPCLASS$InnerClass
, а данные - байты, представляющие файл класса. Это работает для внешних классов.