2012-01-12 8 views
7

私のJavaプログラムのOpenOffice APIを使って私のために文書を処理します。文書のdisposeメソッドが返されない場合もありますが、CPU負荷は100%にとどまりません発生する。Java:メソッドが返されません。 (XComponent.dispose

をどのように私はこのような状況で正しく/コードを行動しなければならない?

私の現在のアプローチは、2秒間成功するためにdisposeを待つことである。それは私が適切なAPIを通じてのOpenOfficeを終了しようとしていない場合もしそれがうまくいかなかったら(私が期待している通り)、私は電話をかけて土台のプロセスを殺す。

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

その後、最初にXComponentを処分しようとするスレッドに

disposeThread.stop(); 

を呼び出します。今ではJava APIにはThread.stop()が使われてはならないと書かれています(それに有効な引数があります)ので、もっと良い解決策があるかどうか疑問に思っています。

+0

これは、どのように言い回されているかによってプログラマにとっては適切かもしれない質問の1つですが、これはおそらくStackOverflow上にあるはずの技術的および実装固有のものだと思います。 –

+0

@maple_shaft私はそれについて考えましたが、それに対して決心しました。私の特定の問題を処理する方法についての質問であれば、そこに置いておきますが、私はすでに問題の解決策を見つけましたが、特定の解決策よりも優れた概念があるかどうかを尋ねています。しかし、ええ、どのようにその言葉に依存します。 –

+0

@RobZこれはOpen Office固有の質問ではありません。私のオープンなオフィスの状況は単なる例です。 –

答えて

4

奇妙な珍しいバグを回避するには、かなり斬新な方法があるようです。

Java APIではThread.stop()を使用すべきではないと言いますが、OpenOffice Document.dispose()は常に返さなければならないとも言えます。まれなケースであっても、バグではありません。終了して値を返さず、無効な状態が原因で例外もスローされません。無限ループで動作するだけなので、バグです。

回避策として、アプリケーションがハングしないようにする必要がある場合は、Thread.stop()を使用しても問題はありません。なぜそれを使用してはならないかについての免責事項は、悪用される可能性のあるマルチスレッドアプリケーションの開発が妨げられることをより意図しています。

+1

あなたの答えをありがとう、誰かがより良いアイデアを思いつくことができるかどうかを今一ヶ月待ったが、残念ながら...私の現在の解決策は、システムコマンド(psとkill)を使用してこれを終了させることですそれは完全にハングアップするので、状況。それはそこに巨大な混乱のように思える:(とにかく、私は正しいとあなたの答えをマークします、もう一度ありがとう。 –

関連する問題