Java:方法不返回.(XComponent.dispose

Ang*_*chs 7 java api error-handling multithreading openoffice.org

我使用Java程序中的OpenOffice API为我处理文档.有时(每100k左右调用一次)Document的dispose方法不返回,CPU负载保持在100%但似乎没有发生任何事情.

在这种情况下我应该如何正确行事/编码?

我目前的做法是等待处置成功两秒钟.如果不是,我尝试通过适当的API终止OpenOffice.如果那也失败了(正如我所料)那么我通过调用来杀死soffice进程

XDesktop xDesk = (...) // achive desktop
xDesk.terminate();
Runtime.getRuntime().exec("pkill soffice"); // "taskkill /IM soffice" on windows
Run Code Online (Sandbox Code Playgroud)

然后打电话

disposeThread.stop();
Run Code Online (Sandbox Code Playgroud)

到最初尝试处理XComponent的Thread.现在Java API说不Thread.stop()应该使用(并且有有效的参数)所以我想知道是否有更好的解决方案,我做了什么.

map*_*aft 4

看来你有一些非常新颖的方法来解决一个奇怪的罕见错误。

我的看法是,虽然 Java API 声明Thread.stop()不应使用,但同样可以说 OpenOfficeDocument.dispose()应该始终返回。即使这种情况很少发生,它仍然是一个错误,因为它不会完成并返回值,也不会因为无效状态而引发异常。它只是在无限循环中运行,因此它是一个错误。

Thread.stop()由于这是一种解决方法,因此如果您需要防止应用程序挂起,我认为使用它没有任何问题。关于为什么不应该使用它的免责声明更多的是为了防止开发不良的多线程应用程序,因为它绝对可能被滥用。