Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:方法不返回。(XComponent.dispose)_Java_Multithreading_Api_Error Handling_Openoffice.org - Fatal编程技术网

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

Java:方法不返回。(XComponent.dispose),java,multithreading,api,error-handling,openoffice.org,Java,Multithreading,Api,Error Handling,Openoffice.org,我使用Java程序中的OpenOffice API为我处理文档。有时(大约每100k次调用一次)文档的dispose方法不会返回,CPU负载保持在100%,但似乎什么也没有发生 在这种情况下,我应该如何正确操作/编码 我目前的方法是等待dispose成功两秒钟。如果没有成功,我将尝试通过适当的API终止OpenOffice。如果失败(正如我所预期的那样),那么我将通过调用 XDesktop xDesk = (...) // achive desktop xDesk.terminate(); Ru

我使用Java程序中的OpenOffice API为我处理文档。有时(大约每100k次调用一次)文档的dispose方法不会返回,CPU负载保持在100%,但似乎什么也没有发生

在这种情况下,我应该如何正确操作/编码

我目前的方法是等待dispose成功两秒钟。如果没有成功,我将尝试通过适当的API终止OpenOffice。如果失败(正如我所预期的那样),那么我将通过调用

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()也是如此
应该总是返回。即使很少发生,它仍然是一个bug,因为它不会完成并返回值,也不会因为无效状态而引发异常。它只是在无限循环中运行,因此它是一个bug


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

这是其中一个问题,根据它的措辞,它可能适合程序员,但我觉得我“它的技术和实现非常具体,很可能会出现在StackOverflow上。@maple_shaft我考虑过这个问题,但决定反对它。如果这是一个关于如何处理我的具体问题的问题,我会把它放在那里,但我已经找到了解决问题的有效方法,现在我想问是否有更好的概念,而不是但这取决于它的措辞。@RobZ这真的不是一个开放式办公室特定的问题。我的开放式办公室情况只是一个例子。@AngeloNeuschitzer-现在看起来这个问题将被迁移。也许让这个问题继续讨论吧(特定解决方案)然后在这里打开一个新的,非常笼统的措辞,一个关于程序员的?我对最佳实践也很感兴趣,但我可以看到有人在OpenOffice中寻找一个特定的解决方案。我认为正确的方法是向发布有问题代码的人提交一个bug。谢谢你的回答,我等了一个多月才找到解决方案ee如果有人能想出一个更好的主意,但不幸的是没有…我目前的解决方案是在这种情况下使用系统命令(ps和kill)终止OOo,因为它完全挂起。这看起来像是一个巨大的混乱:(无论如何,我会标记你的答案是正确的,再次感谢。