2013-02-13 2 views
1

타사 COM API를 Java 응용 프로그램에 연결해야합니다. 그래서 저는 Com4j를 사용하기로 결정했습니다. 그리고 지금까지는 만족했지만, 이제는 문제가 생겼습니다.Com4J 인터페이스가 반복되는 동안 매달려있는 이유는 무엇입니까?

tlbgen을 실행 한 후 원본 API 설명서에 따라 IEnum 인터페이스 정의를 준수하는 IAddressCollection이라는 개체가 있습니다. 이 개체는 java.util.Iterator<Com4jObject>을 반환하는 iterator() 함수를 제공합니다. 객체는 메시지의 모든 주소를 찾고 싶을 때 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에 문제가 있습니까?

답변

1

좋아, 나는 내 자신의 질문에 대답하는 것이 싫지만,이 경우에는 문제를 발견했다. 문제는 기본 API입니다. IAddressCollection은 예상했던대로 0 대신 1 기반 인덱싱을 사용합니다. API 설명서에서이 정보를 제공하지 않았습니다. 나는 목적이 방법을 당길 수 그래서 나는이에 두통에 대한

IAddressCollection adrCol = IMessage.getAddressees(); 
for(int i = 1; i <= adrCol.count(); i++){ 
     IAddress adr = adrCol.item(i); 
     // IAddress is the actual interface that I wanted and this works 
} 

그래서 미안 이것을 처리 할 수있는 item 기능이있다.

관련 문제