Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的Com4J接口在迭代过程中挂起?_Java_Com4j - Fatal编程技术网

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

Java 为什么我的Com4J接口在迭代过程中挂起?,java,com4j,Java,Com4j,我必须将第三方COM API连接到Java应用程序中。所以我决定使用Com4j,到目前为止我已经很满意了,但现在我遇到了一个问题 运行tlbgen后,我有一个名为IAddressCollection的对象,根据原始API文档,该对象符合IEnum接口定义。该对象提供了一个iterator()函数,该函数返回java.util.iterator。当我想查找消息的所有地址时,该对象来自另一个名为IMessage的对象。因此,我希望代码的工作方式如下: IAddressCollection adrC

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

运行
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