Java Desktop.browse偶尔返回“;在任何活动激活上下文中找不到请求的查找密钥”;
我真的在努力解决这个问题,因为它对我来说似乎是随机发生的。当我打电话时Java Desktop.browse偶尔返回“;在任何活动激活上下文中找不到请求的查找密钥”;,java,internet-explorer,activexobject,jacob,Java,Internet Explorer,Activexobject,Jacob,我真的在努力解决这个问题,因为它对我来说似乎是随机发生的。当我打电话时 Desktop.browse(“一些url”) Internet Explorer将不显示。异常消息如下所示: 在任何活动激活上下文中都找不到请求的查找密钥 当它发生时,它会一直发生,直到我重新启动机器,但它最终会再次发生 出现此问题的工作站正在运行Windows XP,并将Internet Explorer 8设置为默认浏览器 编辑:我忘了提到,如果我直接打开Internet Explorer并导航到有问题的URL,那么它
Desktop.browse(“一些url”)代码>
Internet Explorer将不显示。异常消息如下所示:
在任何活动激活上下文中都找不到请求的查找密钥
当它发生时,它会一直发生,直到我重新启动机器,但它最终会再次发生
出现此问题的工作站正在运行Windows XP,并将Internet Explorer 8设置为默认浏览器
编辑:我忘了提到,如果我直接打开Internet Explorer并导航到有问题的URL,那么它就可以正常工作
EDIT2:如果调用Desktop.browse,然后至少15分钟后再次调用,则可能会发生这种情况。现在重新启动应用程序似乎可以解决问题。我缩小了问题范围,发现了真正的原因,毕竟这与时间无关
java.awt.Desktop.browse(“一些url”)
引发此错误,因为在应用程序的前一步中,使用JACOB框架以编程方式打开了ActiveXObject
使用此ActiveXObject编写此代码的开发人员完全忽略了释放资源的麻烦。出于某种原因,内存中的这个ActiveXObject阻止或破坏了对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();
}