gpt4 book ai didi

java - 为什么我的 Com4J 界面在迭代期间挂起?

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:47 26 4
gpt4 key购买 nike

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

运行 tlbgen 后我有一个名为 IAddressCollection 的对象根据原始API文档,它符合IEnum接口(interface)定义。该对象提供了 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 的问题?

最佳答案

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

处理这个问题
 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
}

很抱歉给您带来烦恼。

关于java - 为什么我的 Com4J 界面在迭代期间挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14855510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com