Java Desktop.browse有时会返回“在任何活动的激活上下文中都找不到请求的查找键”

问题描述

| 我真的在这个问题上挣扎,因为它似乎是随机发生的。我打电话的时候
Desktop.browse(\"some url\");
Internet Explorer将不会显示。异常消息如下,   在任何活动的激活上下文中都找不到请求的查找关键字。 发生这种情况之前,一直会发生这种情况,直到我重新启动机器为止,但最终再次发生。 似乎有此问题的工作站正在运行Windows XP,并将Internet Explorer 8设置为默认浏览器。 编辑:我忘了提到,如果我直接打开Internet Explorer并导航到有问题的URL,那么它将正常工作。 EDIT2:如果调用Desktop.browse,然后至少在15分钟后再次调用它,这似乎会发生。现在重新启动应用程序似乎可以解决问题。     

解决方法

        我把问题缩小了范围,发现真正的原因是什么,毕竟这与时间无关。
java.awt.Desktop.browse(\"some url\");
之所以抛出此错误,是因为在应用程序的上一步中,使用JACOB框架以编程方式打开了ActiveXObject。 使用此ActiveXObject编写此代码的开发人员忽略了根本释放资源的麻烦。由于某种原因,内存中的此ActiveXObject阻止或破坏了对Dispatch调用
java.awt.Desktop
类的默认OS浏览器的操作。我认为这是有道理的。 我通过声明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();
}
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...