Java:方法不返回。 (XComponent.dispose
我使用Java程序中的OpenOffice API来为我处理文档。 有时(每100k左右调用一次)Document的处理方法不会返回,CPU负载保持100%,但似乎没有任何事情发生。
在这种情况下,我应该如何行动/正确编码?
我目前的做法是等待处置成功两秒钟。 如果没有,我尝试通过适当的API终止OpenOffice。 如果失败了(就像我所期望的那样),那么我会通过致电来杀死soffice进程
XDesktop xDesk = (...) // achive desktop
xDesk.terminate();
Runtime.getRuntime().exec("pkill soffice"); // "taskkill /IM soffice" on windows
然后打电话
disposeThread.stop();
到最初尝试处置XComponent的线程。 现在Java API声明不应该使用Thread.stop()
(并且有有效的参数),所以我想知道是否有更好的解决方案。
似乎你有一些非常新颖的方法来解决一个奇怪的罕见错误。
我看到的方式是,虽然Java API声明不应该使用Thread.stop()
,但可以说OpenOffice Document.dispose()
应该始终返回。 即使这种情况很少发生,它仍然是一个错误,因为它没有完成并返回一个值,也不会因为状态无效而抛出异常。 它只是在无限循环中运行,因此它是一个错误。
由于这是一种解决方法,如果您需要阻止应用程序挂起,则看到使用Thread.stop()
时没有问题。 关于为什么不应该使用的免责声明更多用于防止开发不良的多线程应用程序,因为它绝对可能被滥用。