2008-08-28 5 views
17

विभिन्न System.exit बुला कारणों के लिए जब जावा आवेदन लेखन पर सिकोड़ी है, इसलिए मैं कैसे बुला प्रक्रिया है कि सब कुछ की योजना के अनुसार चल रहा है नहीं सूचित कर सकते हैं?विकल्प (1)

संपादित करें: 1 किसी भी गैर शून्य से बाहर निकलें कोड के लिए एक standin है।

उत्तर

23

System.exit के उपयोग के एक बड़े जावा अनुप्रयोग (सर्वर) के (जैसे सर्वलेट, एप्लेट) जब 'आवेदन' वास्तव में एक उप अनुप्रयोग है पर सिकोड़ी है: इस मामले में System.exit JVM रोक और इसलिए सभी भी कर सकता है अन्य उप-अनुप्रयोग। इस स्थिति में, एक उपयुक्त अपवाद फेंकना, जिसे एप्लिकेशन फ्रेमवर्क/सर्वर द्वारा पकड़ा और संभाला जा सकता है, सबसे अच्छा विकल्प है।

यदि जावा एप्लिकेशन वास्तव में एक स्टैंडअलोन एप्लिकेशन के रूप में चलाने के लिए है, तो System.exit का उपयोग करने में कुछ भी गलत नहीं है। इस मामले में, एक्जिट वैल्यू सेट करना शायद माता-पिता की प्रक्रिया में विफलता या सफलता को संप्रेषित करने का सबसे आसान (और सबसे अधिक उपयोग किया जाने वाला) तरीका है।

1

यह सामान्य बाहर निकलने के लिए तैयार है। यदि "योजना के अनुसार सबकुछ नहीं जा रहा है", तो System.exit ठीक है।

अद्यतन: मुझे यह जोड़ना चाहिए कि मुझे लगता है कि आपके '1' का अर्थ है कि कहीं कहीं दस्तावेज किया गया है।

1

वेब सर्वलेट वातावरण में यह खतरनाक/समस्याग्रस्त भी हो सकता है।

एक अपवाद फेंकना आम तौर पर अन्य विकल्प माना जाता है।

2

हमारी कंपनी की नीति यह है कि यह System.exit (-1) को कॉल करने के लिए ठीक है (यहां तक ​​कि पसंदीदा), लेकिन केवल init() विधियों में। मैं निश्चित रूप से प्रोग्राम के सामान्य प्रवाह के दौरान इसे कॉल करने से पहले दो बार सोचूंगा।

1

अपवाद फेंकना ऐप के एक निश्चित त्रुटि के बारे में जानकारी भेजने का सबसे अच्छा तरीका है।

Exception at thread 'main': FileNotFoundException "The file 'foo' doesn't exist" 

(या कि के करीब कुछ)

8

मैं सहमत भीड़ "एक अपवाद फेंक":

एक नंबर पर आप के रूप में ज्यादा के रूप में नहीं बताता है। एक कारण यह है कि सिस्टम.एक्सिट को कॉल करने से आपके कोड का उपयोग करना मुश्किल हो जाता है यदि आप चाहते हैं कि अन्य कोड इसका उपयोग करने में सक्षम हो। उदाहरण के लिए, यदि आपको पता चलता है कि आपकी कक्षा किसी वेब ऐप, या किसी प्रकार का संदेश उपभोग करने वाला ऐप से उपयोगी होगी, तो उन कंटेनरों को किसी भी तरह विफलता से निपटने का मौका देना अच्छा लगेगा। एक कंटेनर ऑपरेशन को पुनः प्रयास करना, समस्या को लॉग इन करना और अनदेखा करना, व्यवस्थापक को ईमेल भेजना आदि

इसका अपवाद आपके main() विधि होगा; यह अपवाद को जाल कर सकता है, और कुछ मूल्य के साथ System.exit() पर कॉल कर सकता है जिसे कॉलिंग प्रक्रिया या शैल स्क्रिप्ट द्वारा पहचाना जा सकता है।

1

मुझे लगता है कि एक अपवाद फेंकना यह है कि कुछ गलत होने पर आपको क्या करना चाहिए। इस तरह, यदि आपका एप्लिकेशन स्टैंड-अलोन ऐप के रूप में नहीं चल रहा है तो कॉलर इसके प्रति प्रतिक्रिया दे सकता है और इसमें कुछ गलत जानकारी के बारे में कुछ जानकारी है। डीबगिंग उद्देश्यों के लिए यह भी आसान है क्योंकि जब आप स्टैक ट्रेस देखते हैं तो आपको क्या गलत लगता है इसके बारे में बेहतर जानकारी मिलती है।

ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि जब अपवाद शीर्ष स्तर तक पहुंच जाता है और इसलिए वीएम को वीएम छोड़ने का कारण 1 का रिटर्न कोड देता है, इसलिए रिटर्न कोड का उपयोग करने वाले बाहरी अनुप्रयोगों से पता चलता है कि कुछ गलत हो गया है।

एकमात्र मामला जहां मुझे लगता है कि System.exit() समझ में आता है जब आपका ऐप जावा द्वारा अनुप्रयोगों द्वारा बुलाया जाता है और इसलिए रिटर्न कोड का उपयोग करना है यह देखने के लिए कि आपका ऐप काम करता है या नहीं और आप चाहते हैं उन अनुप्रयोगों को अलग-अलग चीजों पर गलत प्रतिक्रिया देने का मौका मिला है, यानी आपको अलग-अलग रिटर्न कोड चाहिए।

3

System.exit() अवरुद्ध होगा, और अगर इसे शुरू किया गया थ्रेड शटडाउन हुक में उपयोग किया जाता है तो एक डेडलॉक बनाएं।

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