Java: el método no regresa.(XComponent.dispose
multithreading api (1)
Uso la API de OpenOffice de mi Programa Java para manejar Documentos para mí. A veces (una vez cada 100k llamadas aproximadamente) el método de eliminación de un documento no retorna, la carga de la CPU permanece en 100% pero parece que nada sucede.
¿Cómo debo actuar / codificar correctamente en esta situación?
Mi enfoque actual es esperar a que el eliminador tenga éxito durante dos segundos. Si no, trato de terminar OpenOffice a través de la API apropiada. Si eso también falla (como era de esperar), entonces elimino el proceso de soffice con una llamada a
XDesktop xDesk = (...) // achive desktop
xDesk.terminate();
Runtime.getRuntime().exec("pkill soffice"); // "taskkill /IM soffice" on windows
y luego llamar
disposeThread.stop();
al subproceso que inicialmente intenta deshacerse del XComponent. Ahora la API de Java dice que Thread.stop()
no debería usarse (y hay argumentos válidos para eso), así que me pregunto si hay alguna solución mejor que lo que hice.
Parece que tienes algunas formas bastante novedosas de solucionar un raro error extraño.
La forma en que lo veo es que, aunque la API de Java indica que Thread.stop()
no se debe usar, lo mismo se puede decir de que OpenOffice Document.dispose()
siempre debería devolver. Incluso si es una ocurrencia rara, sigue siendo un error, ya que no termina y devuelve un valor ni arroja una excepción debido a un estado no válido. Simplemente se ejecuta en un bucle infinito, por lo tanto, es un error.
Como es una solución alternativa, no veo problemas con el uso de Thread.stop()
si necesita evitar que su aplicación se cuelgue. La cláusula de exención de responsabilidad sobre por qué no debe utilizarse tiene más el objetivo de prevenir aplicaciones de subprocesos múltiples poco desarrolladas, ya que puede ser objeto de abusos.