एक स्विंग-एप में किसी भी धागे से System.exit()
को आमंत्रित करना ठीक है? (उदाहरण के लिए ईडीटी पर?)किस धागे से System.exit() को स्विंग-ऐप में बुलाया जाना चाहिए?
उत्तर
यदि आप इसकी सहायता कर सकते हैं तो आपको System.exit()
पर कॉल नहीं करना चाहिए।
जावा प्रक्रिया से बाहर निकलने का सबसे अच्छा तरीका सभी धागे सामान्य रूप से बाहर निकलने देना है। यह वीएम को समाप्त कर देगा।
आपके मुख्य JFrame
में, आपको setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
होना चाहिए।
फिर आप पर JFrame
को बंद करने और ईडीटी से बाहर निकलने के लिए कॉल कर सकते हैं।
चूंकि वीएम System.exit()
कॉल के बाद समाप्त हो गया है, मुझे नहीं लगता कि इससे कोई फर्क पड़ता है जिससे कॉल किया जा रहा है।
मैं सहमत हूं। चूंकि बाहर निकलने के कारण() इसके रास्ते में सब कुछ मारता है, आपको वास्तव में परवाह नहीं करना चाहिए कि कौन सा धागा इसे कॉल करता है। – f1sh
System.exit()
चल रहे धागे को नहीं बल्कि वर्चुअल मशीन को समाप्त करता है। तो इसे किसी भी धागे से बुलाया जा सकता है, परिणाम हमेशा एक जैसा होता है, और अगर वीएम मर जाता है, तो थ्रेड में सभी संभावित असंगत राज्य एक बार में मौजूद नहीं होंगे।
आप इसे किसी भी थ्रेड से कॉल कर सकते हैं, लेकिन यह IMHO का उपयोग करने के लिए कठोर है। आभासी मशीन समाप्त हो जाएगी, कोई फर्क नहीं पड़ता कि और क्या चल रहा है।
मैं dispose()
पसंद करता हूं या बस बंद करता हूं (setDefaultCloseOperation(DISPOSE_ON_CLOSE)
) किसी भी प्रदर्शित विंडो (जेएफआरएएम, जेडियलॉग, ...)। यदि केवल डेमॉन थ्रेड चल रहे हैं, तो वर्चुअल मशीन समाप्त हो जाएगी। यदि कुछ लाइव गैर-डिमन थ्रेड हैं, तो JVM समाप्त नहीं होगा और धागा अपना काम पूरा कर सकता है।
ऐसा करने से, मैं हमेशा किसी एक प्रोग्राम को शामिल कर सकता हूं बिना चिंता किए बिना अगर उनमें से कोई गलती से दूसरे को समाप्त कर देगा।
बहुत कम स्थिति है जहाँ JVM वास्तव में "मारा" करने की जरूरत है ...
स्विंग नियम नहीं हैं EDT धागा सामान्य रूप से समाप्त करने के लिए के लिए।
सबसे महत्वपूर्ण यह सुनिश्चित करना है कि सभी फ्रेम का निपटारा किया गया हो। दुर्भाग्यवश, यदि आप माता-पिता के बिना मोडल संवाद का उपयोग करते हैं तो यह स्पष्ट नहीं हो सकता है क्योंकि स्विंग ऐसे संवादों के लिए एक अदृश्य पैरेंट फ्रेम तैयार करेगी।
इस मामले में, आपको सभी फ़्रेम सूचीबद्ध करना होगा (आप इसके लिए Frame.getFrames()
का उपयोग कर सकते हैं) और स्पष्ट रूप से dispose()
उन्हें।
बेशक आपको यह सुनिश्चित करना होगा कि Thread
जीवित है (दाएं को छोड़कर)। जेडीके से कुछ पुस्तकालयों और यहां तक कि कुछ एपीआई गैर-डिमन थ्रेड बनाते हैं, जिन्हें आपको स्वयं बंद करना होगा।
अंत में, और सबसे महत्वपूर्ण बात यह है कि System.exit() को कॉल नहीं करना जावा वेब स्टार्ट वातावरण में काम नहीं करेगा (अधिक जानकारी प्राप्त करने के लिए this SO question पर एक नज़र डालें)।
तो, निष्कर्ष में, मेरी सलाह वास्तव में System.exit()
पर कॉल करना होगा क्योंकि आप हमेशा यह नहीं जानते कि आपका एप्लिकेशन किस माहौल में लॉन्च किया जाएगा। लेकिन मैं उसमें एक महत्वपूर्ण बिंदु जोड़ूंगा: सुनिश्चित करें कि एक बिंदु है जिससे बाहर निकलें। से इसे कॉल करने से कोई भी थ्रेड ठीक रहेगा।
सिस्टम की किसी भी थ्रेड से सिस्टम.एक्सिट को कॉल करने में बिल्कुल कुछ भी गलत नहीं है।इसे "सामान्य रूप से" बाहर निकलने से अभ्यास में काम नहीं होता है, क्योंकि ऐप छोड़ने से पहले, आप पाएंगे कि ऐप सामान एकत्रित करते समय ऐप लटक जाएगा। मैंने बहुत सारे गुई स्विंग ऐप्स लिखे हैं, और इसे कॉल करने में बिल्कुल कुछ भी गलत नहीं है। यह या तो "कठोर" नहीं है। यह जावा रास्ता है।
- 1. URLForUbiquityContainerIdentifier: मुख्य धागे के बाहर धागे में बुलाया जाना चाहिए?
- 2. [तालिका reloaddata] केवल मुख्य धागे से बुलाया जाना चाहिए?
- 3. विधि 'OrderBy' विधि से पहले बुलाया जाना चाहिए अपवाद
- 4. उपclassing dict: dict.__ init __() को बुलाया जाना चाहिए?
- 5. घुमावदार + gtk: क्या मुझे जीयूआई चीजों को धागे में, या रिएक्टर धागे में चलाया जाना चाहिए?
- 6. कब हटाया जाना चाहिए एक gcnew आवंटित वस्तु पर बुलाया जाना चाहिए?
- 7. क्लस्टर्ड इंडेक्स को किस कॉलम पर रखा जाना चाहिए?
- 8. जावास्क्रिप्ट में किस तरह का अपवाद डाला जाना चाहिए?
- 9. क्या CopyFileEx को द्वितीयक धागे से बुलाया जा सकता है?
- 10. हमें सार्वजनिक विधि को किसी अन्य सार्वजनिक से क्यों नहीं बुलाया जाना चाहिए?
- 11. लोडव्यू से [सुपर लोड व्यू] को बुलाया जाना चाहिए या नहीं?
- 12. सी संचालन के आदेश - foo() + बार() - बार से पहले फू को बुलाया जाना चाहिए?
- 13. System.exit ईवेंट कैप्चर कैसे करें?
- 14. क्या इसे "हटाएं" को सदस्य विधि के भीतर से बुलाया जाना चाहिए?
- 15. सी ++: नाशक से पहले यह क्षेत्र से बाहर जाना चाहिए बुलाया जा रहा है?
- 16. JFrame.dispose() बनाम System.exit()
- 17. मुझे किस प्रकार के पायथन ओपनसीवी के लिए जाना चाहिए?
- 18. आर्टिफिशियल इंटेलिजेंस प्रोजेक्ट - मुझे किस भाषा के लिए जाना चाहिए?
- 19. आईओएस पूरा करने वाले हैंडलर ब्लॉक किस धागे में हैं?
- 20. .NET में, घटनाओं को किस धागे में संभाला जाएगा?
- 21. नए मामलों को बनाने के लिए किस मामले में new.env का उपयोग किया जाना चाहिए?
- 22. मुझे सदस्य चर को किस क्रम में घोषित किया जाना चाहिए?
- 23. पावरशेल स्क्रिप्ट को केवल एक पंक्ति का उपयोग करके बुलाया जाना चाहिए?
- 24. 'CreateMap' कथन कहां जाना चाहिए?
- 25. System.exit (0) जावा
- 26. क्या वाइल्डकार्ड आयात से बचा जाना चाहिए?
- 27. System.exit (0) बनाम JFrame.EXIT_ON_CLOSE
- 28. नेट एसडीके समस्या, किस तरह से जाना है?
- 29. सी में थ्रेड पूल कैसे लागू किया जाना चाहिए?
- 30. पूर्णांक को स्पष्ट रूप से कब निर्दिष्ट किया जाना चाहिए?
यह 'DISPOSE_ON_EXIT' नहीं होना चाहिए? 'EXIT_ON_CLOSE' का उपयोग करने से थ्रेड को भी मारने का कारण बन जाएगा, जिससे उन्हें सामान्य रूप से बाहर निकलने की अनुमति नहीं मिलती है (जब उपयोगकर्ता JFrame को बंद करता है)। –
मैं असहमत हूं। जीसी को चीजें बंद होने से पहले कुछ समय लगेगा और ऐप निकल जाएगा। System.exit को कॉल करने में कुछ भी गलत नहीं है, एक बार जब आप इसे बंद करने के साथ निपटाते हैं। फ़ाइलें, सॉकेट, और इस तरह के करीब System.exit को कॉल करने के बाद बस अपने आप को ढूंढें। – Mike