【问题标题】:Java: Method does not return. (XComponent.disposeJava:方法不返回。 (XComponent.dispose
【发布时间】:2012-02-08 22:02:30
【问题描述】:

我使用我的 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 的线程。现在 Java API 说不应该使用 Thread.stop()(并且有有效的论据)所以我想知道是否有比我所做的更好的解决方案。

【问题讨论】:

  • 这是其中一个问题,取决于它的措辞,它可能适合程序员,但我觉得这是技术和实现特定的,它可能应该在 StackOverflow 上。跨度>
  • @maple_shaft 我考虑过,但决定不这样做。如果这是关于如何处理我的具体问题的问题,我会把它放在那里,但我已经找到了解决我的问题的有效解决方案,现在我问是否有更好的概念,而不是具体的解决方案。但是,是的,这取决于它的措辞。
  • @RobZ 这确实不是 Open Office 特定的问题。我的 Open Office Situation 只是一个例子。
  • @AngeloNeuschitzer - 现在看起来这个问题将被迁移。也许让这个转到 SO(特定解决方案),然后在 Programmers 上打开一个新的、非常通用的措辞?我也对最佳实践感兴趣,但我可以看到有人使用 OpenOffice 寻找特定的解决方案。
  • 我认为正确的方法是向发布有问题代码的人提交错误。

标签: java multithreading api error-handling openoffice.org


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢你的回答,我等了一个多月,看看是否有人能想出更好的主意,但不幸的是没有......我目前的解决方案是使用系统命令(ps和kill) 在这种情况下终止 OOo,因为它完全挂起。那里似乎一团糟:(无论如何,我会将您的答案标记为正确,再次感谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多