Java 为什么我的Com4J接口在迭代过程中挂起?
我必须将第三方COM API连接到Java应用程序中。所以我决定使用Com4j,到目前为止我已经很满意了,但现在我遇到了一个问题 运行Java 为什么我的Com4J接口在迭代过程中挂起?,java,com4j,Java,Com4j,我必须将第三方COM API连接到Java应用程序中。所以我决定使用Com4j,到目前为止我已经很满意了,但现在我遇到了一个问题 运行tlbgen后,我有一个名为IAddressCollection的对象,根据原始API文档,该对象符合IEnum接口定义。该对象提供了一个iterator()函数,该函数返回java.util.iterator。当我想查找消息的所有地址时,该对象来自另一个名为IMessage的对象。因此,我希望代码的工作方式如下: IAddressCollection adrC
tlbgen
后,我有一个名为IAddressCollection
的对象,根据原始API文档,该对象符合IEnum
接口定义。该对象提供了一个iterator()
函数,该函数返回java.util.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
}
IAddressCollection adrCol=IMessage.getAddressees();
迭代器adrItr=adrCol.Iterator();
while(adrItr.hasNext()){
Com4jObject adrC4j=adrItr.next();
//通常在这里,我会处理查询界面
//并使用API的其余部分
}
我的问题是,当我尝试执行
adrItr.next()
时,什么都没有发生,代码停止工作,但挂起。没有抛出异常,我通常必须通过任务管理器终止它。所以我想知道这是不是一个常见于Com4j
的问题,或者我处理错了,或者这可能是API的问题?好吧,我讨厌回答我自己的问题,但在这种情况下我发现了问题。问题在于底层API。IAddressCollection
使用了基于1
的索引,而不是我所期望的基于0
的索引。它没有在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
}
IAddressCollection adrCol=IMessage.getAddressees();
对于(int i=1;i好的,我讨厌回答我自己的问题,但在本例中我发现了问题。问题是底层API。IAddressCollection
使用基于1
的索引,而不是我预期的基于0
的索引。它在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
}
IAddressCollection adrCol=IMessage.getAddressees();
对于(int i=1;i