转载 jacob Dispatch not hooked to windows memory 异常处理

jacob常用异常处理 (2011-03-10 15:06:57)
转载

标签: jacob 异常 comfail exception dispid open illegal state it 分类: JAVA

com.jacob.com.ComFailException: Can’t map name to dispid: Open

这种异常是因为操作完成后,没有调用ComThread.Release()去释放jacob

java.lang.IllegalStateException: Dispatch not hooked to windows memory
这种异常有可能是多次调用了ComThread.Release();而引起的。

但我今天碰到这种异常,却不是这样,在初始化jacob所需的对象的时候,会做一个判断:

if (word == null) {
word = new ActiveXComponent(“Word.Application”);
word.setProperty(“Visible”, new Variant(false));
word.setProperty(“DisplayAlerts”, new Variant(false));
}
if (documents == null) {
documents = word.getProperty(“Documents”).toDispatch();
}

这里的word和documents是Dispatch类型。

然后每次操作完成后都会调用ComThread.Release()去释放,但释放后word和documents并不为null,所以每次使用jacob都只有第一次是正常的,后面就要报错,然后必须重启tomcat才行。

问题就出在初始化的判断上了,要这样写:

if (word == null||word.m_pDispatch0) {
word = new ActiveXComponent(“Word.Application”);
word.setProperty(“Visible”, new Variant(false));
word.setProperty(“DisplayAlerts”, new Variant(false));
}
if (documents == null||documents.m_pDispatch
0) {
documents = word.getProperty(“Documents”).toDispatch();
}

这样可以正常初始化jacob,后面的操作也不会报异常了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值