【问题标题】:JACOB library fails when used in multiple threadsJACOB 库在多线程中使用时失败
【发布时间】:2012-03-13 13:04:57
【问题描述】:

我从两个因此启动的相同线程中使用 JACOB 时遇到了一个奇怪的问题。我有一个实用程序类,它使用静态 ActiveXObject 字段将各种请求分派到 WMI。第一个线程工作正常。当第二个线程启动时,我得到以下异常:

com.jacob.com.ComFailException: Can't map name to dispid: ExecQuery
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:858)
at com.jacob.com.Dispatch.callN(Dispatch.java:455)
at com.jacob.com.Dispatch.call(Dispatch.java:544)
at com.jacob.activeX.ActiveXComponent.invoke(ActiveXComponent.java:510)
at JacobWmiAdapter.getResultsList(JacobWmiAdapter.java:111)
at JacobWmiAdapter.getResultsList(JacobWmiAdapter.java:104)
at WindowsInfoCollector.getConnectionInfo(WindowsInfoCollector.java:516)
at WindowsInfoCollector.collect(WindowsInfoCollector.java:118)
at DiagnosisExecutor.execute(DiagnosisExecutor.java:128)
at DiagnosisExecutor.run(DiagnosisExecutor.java:160)
at java.lang.Thread.run(Thread.java:662)

线程是通过在 GUI 中单击鼠标启动的,但可以手动重现错误:

        DiagnosisExecutor dex = new DiagnosisExecutor();
        Thread thread1 = new Thread(dex);
        Thread thread2 = new Thread(dex);

        thread1.start();
        thread1.join();
        Thread.sleep(1000);
        thread2.start();

在我看来,当使用它们的线程终止时,一些分配的资源没有被正确释放。有什么提示吗?

更新:JACOB 版本 1.14.3

【问题讨论】:

  • 我的解决方案:因为使用 ComThread.Release() 释放资源的幼稚方法不起作用,我从以静态方式使用 JACOB 实用程序类转移到在其实例上调用方法。因此,主 ActiveXObject 也在内部重新实例化。可能这会导致 COM 层的内部泄漏,但作为一个务实的人,我真的不在乎。此操作将被调用 2 次,每个会话最多 3 次,我宁愿像这样关闭该问题,也不愿研究 COM 接口实现的黑魔法。

标签: java multithreading activex wmi jacob


【解决方案1】:

我没有使用最新版本的 JACOB 和它的新线程模型,但旧版本绝对不是线程安全的。从 1.7 版开始 > 他们改进了线程模型以更好地反映底层 COM 组件,但是您必须确定所述组件是 MTA 还是 STA,然后适当地初始化 JACOB 类。请参阅JACOB documentation,了解如何根据其要求正确调整您的应用程序。

【讨论】:

  • 感谢您的提示。问题是我并不真正需要线程安全(一次只有一个线程与库一起工作),但 JACOB 似乎仍然无法正确地做家务。
【解决方案2】:

当我开始为多个线程设置相同的线程名称时,我开始遇到类似的问题(第一次执行正常,第二次因无法共同创建对象而失败)。在线程名称中添加序列号作为后缀解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多