У меня странная проблема с использованием 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)
Поток запускается щелчком мыши из графического интерфейса, но ошибка воспроизводится вручную:
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