java中execquery()_JACOB库在多线程中使用时失败

我有一个奇怪的问题,使用来自两个相应启动的相同线程的JACOB。我有一个实用程序类,它使用静态ActiveXObject字段将各种请求分发给WMI。第一个线程正常工作。当第二个线程开始我得到以下异常:JACOB库在多线程中使用时失败

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

+0

我的解决方案:因为使用ComThread.Release()释放资源的幼稚方法无效,因此我从静态方式使用JACOB实用程序类调用其实例上的方法。因此主要的ActiveXObject也在内部得到重新实例化。可能这会导致COM层的内部泄漏,但作为一个实际的人,我真的不在乎。这个操作会被称为2次,每次会话最多3次,我宁愿这样来解决这个问题,而不是调查COM接口实现的黑魔法。 –

2012-03-13 16:51:46

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值