转载 jacobDispatch not hooked to windows memory 异常处理

    xiaoxiao2022-07-13  161

    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_pDispatch0) { documents = word.getProperty(“Documents”).toDispatch(); }

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

    最新回复(0)