2012-01-12 17 views
7

मैं अपने जावा प्रोग्राम से OpenOffice एपीआई का उपयोग मेरे लिए दस्तावेज़ को संभालने के लिए। कभी कभी (एक बार हर 100k या तो कॉल) एक दस्तावेज़ के निपटाने विधि वापस नहीं करता है, सीपीयू लोड 100% पर रहता है लेकिन कुछ भी लगता है ऐसा करने के लिए।जावा: विधि वापस नहीं आती है। (XComponent.dispose

मैं कैसे इस स्थिति में सही ढंग से/कोड कार्य करना चाहिए?

मेरे वर्तमान दृष्टिकोण निपटाने दो सेकंड के लिए सफल होने के लिए प्रतीक्षा करने के लिए है। यदि यह मैं उपयुक्त एपीआई के माध्यम से OpenOffice समाप्त करने के लिए कोशिश नहीं करता अगर यह भी विफल रहता है (जैसा कि मैं उम्मीद करता हूं) तो मैं

XDesktop xDesk = (...) // achive desktop 
xDesk.terminate(); 
Runtime.getRuntime().exec("pkill soffice"); // "taskkill /IM soffice" on windows 
पर कॉल के साथ सोफिस प्रक्रिया को मारता हूं

और फिर फोन

disposeThread.stop(); 
धागा है कि शुरू में XComponent निपटाने की कोशिश करता है के लिए

। अब जावा एपीआई का कहना है कि Thread.stop() नहीं किया जाना चाहिए (और वहाँ है कि करने के लिए वैध तर्क हैं) तो अगर कोई बेहतर समाधान है कि मैं क्या किया हैं मैं सोच रहा हूँ।

+0

यह उन सवालों जहां यह कैसे शब्दों में है पर निर्भर करता है, यह प्रोग्रामर के लिए उपयुक्त हो सकता है में से एक है, लेकिन मुझे लगता है कि यह तकनीकी है और कार्यान्वयन काफी विशेष है कि यह शायद StackOverflow पर होना चाहिए। –

+0

@maple_shaft मैंने इसके बारे में सोचा लेकिन इसके खिलाफ फैसला किया। अगर यह मेरी विशिष्ट समस्या को संभालने के बारे में एक सवाल था, तो मैंने इसे वहां रखा होगा, लेकिन मुझे पहले से ही मेरी समस्या के लिए एक समाधान समाधान मिल गया है और अब मैं पूछ रहा हूं कि एक विशिष्ट समाधान के बजाय बेहतर अवधारणा है या नहीं। लेकिन हाँ, इसके आधार पर यह कैसे कहा जाता है। –

+0

@RobZ यह वास्तव में एक ओपन ऑफिस विशिष्ट प्रश्न नहीं है। यहां मेरा ओपन ऑफिस स्थिति सिर्फ एक उदाहरण है। –

उत्तर

4

ऐसा लगता है कि आप एक अजीब दुर्लभ बग के आसपास काम करने के लिए कुछ बहुत उपन्यास तरीके होते हैं।

जिस तरह से मैं इसे देखता हूं वह यह है कि जावा एपीआई बताता है कि Thread.stop() का उपयोग नहीं किया जाना चाहिए, वही कहा जा सकता है कि ओपनऑफिस Document.dispose() हमेशा वापस आना चाहिए। यहां तक ​​कि यदि यह एक दुर्लभ घटना है, यह अभी भी एक बग है, क्योंकि यह समाप्त नहीं होता है और एक मूल्य वापस नहीं करता है और न ही यह एक अमान्य स्थिति के कारण अपवाद फेंकता है। यह सिर्फ एक अनंत लूप में चलता है, इसलिए यह एक बग है।

यह एक समाधान नहीं है के रूप में, मैं Thread.stop() का उपयोग कर यदि आप फांसी से आपके आवेदन को रोकने के लिए की जरूरत के साथ कोई समस्या नहीं देखते हैं। इसका उपयोग क्यों नहीं किया जाना चाहिए इसके बारे में अस्वीकरण खराब विकसित बहु-थ्रेडेड अनुप्रयोगों को रोकने के लिए अधिक इरादा है क्योंकि इसका बिल्कुल दुरुपयोग किया जा सकता है।

+1

आपके उत्तर के लिए धन्यवाद, मैंने यह देखने के लिए अब एक महीने से अधिक इंतजार किया है कि कोई भी बेहतर विचार के साथ आ सकता है, लेकिन दुर्भाग्य से नहीं ... मेरा वर्तमान समाधान सिस्टम कमांड (पीएस और मार) का उपयोग करना है ताकि ओओ को समाप्त किया जा सके। स्थिति क्योंकि यह पूरी तरह से लटका है। यह वहां एक बड़ी गड़बड़ी की तरह लगता है :(वैसे भी, मैं आपके उत्तर को सही के रूप में चिह्नित करूंगा, धन्यवाद। –

संबंधित मुद्दे

 संबंधित मुद्दे