2012-01-12 123 views
7

我使用Java程序中的OpenOffice API爲我處理文檔有時(每調用一次100k左右)Document的dispose方法不會返回,CPU負載保持100%,但沒有任何東西發生。Java:方法不返回。 (XComponent.dispose

我應該如何在這種情況下,正確地行事/代碼?

我目前的做法是等待處置兩秒鐘才能成功。如果沒有我嘗試通過適當的API來終止的OpenOffice (如我所期望的那樣),那麼我會致電

XDesktop xDesk = (...) // achive desktop 
xDesk.terminate(); 
Runtime.getRuntime().exec("pkill soffice"); // "taskkill /IM soffice" on windows 
以殺死soffice進程

然後調用

disposeThread.stop(); 

給最初試圖處置XComponent線程。現在Java API說Thread.stop()不應該被使用(並且有有效的參數),所以我想知道是否有更好的解決方案,我做了什麼。

+0

這是其中的一個問題,這取決於它如何措辭,它可能適合程序員,但我覺得這是技術和實現的具體情況,應該可能在StackOverflow上。 – 2012-01-12 15:30:11

+0

@maple_shaft我想過但決定反對它。如果這是一個關於如何處理我的具體問題的問題,我會把它放在那裏,但是我已經爲我的問題找到了一個可行的解決方案,現在我問是否有更好的概念,而不是具體的解決方案。但是,它取決於它的措辭。 – 2012-01-12 15:50:20

+0

@RobZ這真的不是一個開放式辦公室的具體問題。我的開放式辦公室情況只是一個例子。 – 2012-01-12 15:56:44

回答

4

看來你似乎有一些非常新穎的方法來解決奇怪的罕見bug。

我看到的方式是,儘管Java API指出不應該使用Thread.stop(),但同樣可以說OpenOffice Document.dispose()應該總是返回。即使這種情況很少發生,但仍然是一個錯誤,因爲它沒有完成並返回一個值,也不會因爲狀態無效而拋出異常。它只是在無限循環中運行,因此它是一個錯誤。

因爲這是一種解決方法,所以如果您需要阻止應用程序掛起,則看到使用Thread.stop()時沒有問題。關於爲什麼不應該使用的免責聲明更多用於防止開發不良的多線程應用程序,因爲它絕對可能被濫用。

+1

謝謝你的答案,我等了一個多月,看看有沒有人能想出一個更好的主意,但不幸的是不......我目前的解決方案是使用系統命令(ps和kill)在此終止OOo因爲它完全掛起。這似乎是一個巨大的混亂在那裏:(無論如何,我會標記你的答案是正確的,再次感謝。 – 2012-02-28 16:38:14