Я использую class.forname для создания нового экземпляра класса. Имя класса происходит из свойств.
Допустим, у меня есть несколько классов в двух пакетах.
com.package.Parser1
com.package.Parser2
com.package.Parser3
net.package.parser4
net.package.parser5
net.package.parser6
Следующие классы также существуют в вышеуказанных пакетах (это не создаются)
com.package.ParserLoader
com.package.ParserInterface
net.package.GenericParser
При инициализации указанный синтаксический анализатор помещается в вектор. Затем осуществляется доступ к вектору, и каждый класс инициализируется с использованием своего имени класса, как показано ниже
while (tokens.hasMoreTokens())
parsers.addElement(
Class.forName((String) tokens.nextToken()).newInstance());
}catch(Exception e){
e.printStackTrace();
}
Код выше находится в классе ParserLoader, который находится в том же пакете, что и парсеры 1,2,3.
Все парсеры 1, 2 и 3 реализуют интерфейс ParserInterface.
Парсеры 4,5 и 6 расширяют общий GenericParser.
GenericParser реализует интерфейс ParserInterface.
Когда я запускаю вышеизложенное, генерируется исключение, показанное ниже
com.sun.jdi.InvocationException occurred invoking method
Есть идеи, почему это происходит?
Редактировать
Другая проблема, с которой я сталкиваюсь, - я не вижу никакой трассировки стека. Там нет стека трассировки! Я вижу эту ошибку в Eclipse только тогда, когда я отлаживаю приложение и смотрю на содержимое вектора парсеров. Вектор должен содержать ссылки на объекты парсера. Парсеры в пакете com.package. * Хороши, но они не создают экземпляров какого-либо парсера в пакете net.package. *.