Pregunta

Tengo un problema extraño utilizando Jacob de dos en consecuencia, comenzó hilos idénticos.Tengo una clase de utilidad que utiliza un campo estático ActiveXObject para enviar varias solicitudes a la WMI.El primer hilo funciona bien.Cuando se inicia el segundo hilo, obtengo la siguiente excepción:

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)

El hilo se inicia con un clic del mouse de una GUI, pero el error es reproducible manualmente:

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

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

Me parece que algunos recursos asignados no se sueltan correctamente cuando el hilo que los usa termina.¿Algún sugerencia?

Actualización: Jacob Versión 1.14.3

¿Fue útil?

Solución

No he usado la última versión de Jacob con su nuevo modelo de roscado, pero las versiones anteriores definitivamente fueron definitivamente no hilo seguro.A partir de la versión 1.7> Han mejorado el modelo de roscado para reflejar mejor los componentes COM subyacentes, pero debe determinar si dicho componente es MTA o STA, y luego inicialice las clases de Jacob adecuadamente.Consulte el Documentación de Jacob para cómo adaptar correctamente su solicitud de acuerdo con sus requisitos.

Otros consejos

He empezado a experimentar un problema similar (First Ejecución OK, el segundo error falló con el objeto CO-CREATE), cuando empezó a configurar el mismo nombre de rosca en varios hilos.Agregar número secuencial como un sufijo al nombre de rosca fija el problema para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top