Стеки исключений.
Exception in thread "main" java.lang.ClassCircularityError:
plugins/agents/Agent
at java.lang.Class.getDeclaringClass(Native Method)
at java.lang.Class.getEnclosingClass(Class.java:1085)
at java.lang.Class.getCanonicalName(Class.java:1169)
at agents.loader.AgentLoader.getPluginAgentFromCache(AgentLoader.java:288)
at compiler.AgentCompiler.main(AgentCompiler.java:365)
Ниже приведен код, вызывающий ошибку.Это очень странно, если я изменяю getCanonicalName на getName, тогда все в порядке.Эти загруженные классы загружаются с настроенным ClassLoader.как cl = defineClass(name, byteArray, 0, byteArray.length);
public Class getPluginAgentFromCache(String name)
{
if (_loadedClasses == null)
return null;
Iterator <Class> iter = _loadedClasses.iterator();
while (iter.hasNext())
{
Class c=iter.next();
if (c.getCanonicalName().equals(name))
return c;
}
return null;
}
Кто-нибудь может сказать мне, почему getCanonicalName здесь выдаст эту ошибку?(JDK 1.6.0_20)
ОБНОВЛЕНИЕ После некоторых исследований я обнаружил, что при определении класса вы должны сначала загрузить его родительский класс.Но это тяжело.Когда я пишу в двоичный файл, они просто упорядочены по последовательности в папке файлов.Поэтому, когда я загружу их, они не будут заказывать классом иерархии.Это немного раздражает. Пока я просто зацикливаю классы, затем снова загружаю класс ошибок.Это обходной путь, но не очень хороший.