मेरे पास एक अच्छी तरह से परिभाषित कोशिश/कैच/अंततः श्रृंखला है जो अंततः सामान्य परिस्थितियों में ठीक से ब्लॉक को निष्पादित करता है और निष्पादित करता है, हालांकि जब कोई समय-समय पर जीयूआई में लाल एक्स को हिट करता है, तो प्रोग्राम पूरी तरह से मौजूद होता है (कोड = 0) और मुख्य धागे के आखिरकार ब्लॉक को बुलाया नहीं जाता है।एक आवेदन से बाहर निकलना?
वास्तव में, मैं चाहता हूं कि प्रोग्राम लाल-एक्स के एक क्लिक पर बाहर निकलें, लेकिन जो मैं नहीं चाहता वह आखिरकार {} ब्लॉक का छोड़ रहा है!
class GUI { // ...
...
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
try {
processObject.getIndicatorFileStream().close();
} catch (Exception ignore) {}
System.exit(0);
}
});
...
}
लेकिन मैं चाहता हूँ: मैं इन सबसे छुटकारा अंत में जीयूआई में मैन्युअल रूप से ब्लॉक, लेकिन मैं वास्तव में यह इस तरह से करने के लिए के बाद से मैं जीयूआई वास्तविक कार्यक्रम से decoupled चाहते नहीं करना चाहते का सबसे महत्वपूर्ण हिस्सा में डाल सिर्फ इस तरह एक कॉल करने के लिए पसंद करते हैं:
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
और सुनिश्चित करें कि सभी अंत में {} ब्लॉक से बाहर निकलें के बाद प्रत्येक धागे से कहा जाता हो सकते हैं।
मुझे पता है कि यह वास्तव में अपेक्षित है। यदि आवेदन एक अलग थ्रेड से बंद है (जीयूआई थ्रेड कहें) तो मुख्य धागा बस अपने ट्रैक में रुक जाएगा।
संक्षेप में - मैं कैसे सुनिश्चित करूं कि एक System.exit (0) या JFrame.EXIT_ON_CLOSE अभी भी प्रत्येक थ्रेड को निष्पादित करने के लिए अवरुद्ध कर देगा?
शायद यह ध्यान रखना महत्वपूर्ण है कि यह हमेशा चलाने के लिए गारंटी नहीं है (उदा। जब जेवीएम दुर्घटनाग्रस्त हो जाता है)। – DannyMo
@damo हां यह एक महत्वपूर्ण बात है। मुझे इसे –
उत्तर में जोड़ने दें यह बुरी सलाह है। शट डाउन हुक ** ** नियमित रूप से बाहर निकलने के दिन के रूप में कभी भी ** ** का उपयोग नहीं किया जाना चाहिए। वे केवल अंतिम उपाय हैं, जब सब कुछ विफल रहता है, बचाया जा सकता है जिसे बचाया जा सकता है। –