首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Com4J接口在迭代过程中挂起了?

为什么我的Com4J接口在迭代过程中挂起了?
EN

Stack Overflow用户
提问于 2013-02-13 22:13:29
回答 1查看 251关注 0票数 1

我必须将第三方COM API连接到Java应用程序中。所以我决定使用Com4j,到目前为止我很满意,但现在我遇到了一个问题。

在运行tlbgen之后,我有一个名为IAddressCollection的对象,根据原始的API文档,它符合IEnum接口定义。该对象提供了一个返回java.util.Iterator<Com4jObject>iterator()函数。当我想要查找消息的所有地址时,该对象来自另一个名为IMessage的对象。所以我希望代码是这样工作的:

代码语言:javascript
复制
 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的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 17:46:01

好吧,我讨厌回答自己的问题,但在这种情况下,我找到了问题所在。问题出在底层API上。IAddressCollection使用基于1的索引,而不是我期望的基于0的索引。它没有在API文档中提供此信息。有一个item函数,我可以用这种方式拉取对象,所以我可以用

代码语言:javascript
复制
 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
 }

很抱歉给你带来这么大的麻烦。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14855510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档