我真的在努力解决这个问题,因为它似乎随机发生在我身上。当我打电话时,
Desktop.browse("some url");
无法显示Internet Explorer。异常消息如下,
在任何活动的激活上下文中找不到请求的查找密钥。
当它发生时,它会一直发生,直到我重新启动机器,但最终会再次发生。
似乎遇到此问题的工作站正在运行Windows XP,并将Internet Explorer 8设置为默认浏览器。
编辑:我忘了提到如果我直接打开Internet Explorer并导航到相关的网址,那么它将正常工作。
EDIT2:如果调用Desktop.browse,然后至少在15分钟后再次调用,则会发生这种情况。现在重新启动应用程序似乎可以解决问题。
答案 0 :(得分: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();
}