0

我真的在为这个问题苦苦挣扎,因为它对我来说似乎是随机发生的。当我打电话时,

Desktop.browse("some url");

Internet Explorer 将不会显示。异常信息如下,

在任何活动的激活上下文中都找不到请求的查找键。

当它发生时,它会一直发生,直到我重新启动机器,但它最终会再次发生。

似乎有此问题的工作站正在运行 Windows XP,并将 Internet Explorer 8 设置为默认浏览器。

编辑:我忘了提到,如果我直接打开 Internet Explorer 并导航到有问题的 URL,那么它会正常工作。

EDIT2:如果调用 Desktop.browse 并在至少 15 分钟后再次调用,这似乎会发生。现在重新启动应用程序似乎可以解决问题。

4

1 回答 1

0

我缩小了问题范围,发现了真正造成这种情况的原因,毕竟它与时间无关。

java.awt.Desktop.browse("some url");抛出此错误是因为在应用程序的上一步中,使用 JACOB 框架以编程方式打开了 ActiveXObject。

使用此 ActiveXObject 编写此代码的开发人员根本没有考虑释放他的资源。出于某种原因,内存中的这个 ActiveXObject 阻止或破坏了对java.awt.Desktop类中默认 OS 浏览器的 Dispatch 调用。我想这是有道理的。

我通过声明一个 JACOB 事务并在 finally 块中释放所有资源来解决这个问题,如下所示:

ActiveXObject ao1 = null;
ActiveXObject ao2 = null;
ComThread.initMTA();
try {
  ao1 = new ActiveXObject("blaa.blaa");
  ao2 = new ActiveXObject("haa.haa");
  // business logic
} finally {
  if (ao1 != null) {
    ao1.safeRelease();
    ao1 = null;
  }
  if (ao2 != null) {
    ao2.safeRelease();
    ao2 = null;
  }
  ComThread.Release();
}
于 2011-06-08T17:34:59.690 回答