问题描述
|
我真的在这个问题上挣扎,因为它似乎是随机发生的。我打电话的时候
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();
}