Мне нужно связать сторонний COM API с Java-приложением. Поэтому я решил использовать Com4j, и до сих пор я был доволен, но теперь у меня возникла проблема.Почему мой интерфейс Com4J висит во время итерации?
После запуска tlbgen
У меня есть объект под названием IAddressCollection
, который согласно оригинальной документации API соответствует определению интерфейса IEnum
. Объект предоставляет функцию iterator()
, которая возвращает java.util.Iterator<Com4jObject>
. Объект приходит от другого объекта с именем IMessage
, когда я хочу найти все адреса для сообщения. Так что я бы ожидать, что код работает так:
IAddressCollection adrCol = IMessage.getAddressees();
Iterator<Com4jObject> adrItr = adrCol.iterator();
while(adrItr.hasNext()){
Com4jObject adrC4j = adrItr.next();
// normally here I would handle the queryInterface
// and work with the rest of the API
}
Моя проблема заключается в том, что, когда я попытка adrItr.next()
ничего не происходит, код перестает работать, но виснет. Никакое исключение не выбрасывается, и я обычно должен убить его через диспетчер задач. Поэтому я задаюсь вопросом, является ли эта проблема распространенной с Com4j
, или я обрабатываю это неправильно или это может быть проблема с API?