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

时间:2012-01-12 13:56:11

标签: java multithreading api error-handling 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

然后致电

disposeThread.stop();

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

1 个答案:

答案 0 :(得分:4)

似乎你有一些非常新颖的方法可以解决一个奇怪的罕见错误。

我看到的方式是,虽然Java API声明不应该使用Thread.stop(),但可以说OpenOffice Document.dispose()应该总是返回。即使它很少发生,它仍然是一个错误,因为它没有完成并返回一个值,也没有因为状态无效而抛出异常。它只是在无限循环中运行,因此它是一个错误。

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