2012-11-13 33 views
26

इन दो विधियों के बीच क्या अंतर है - System.exit() और JFrame.dispose()?JFrame.dispose() बनाम System.exit()

यदि कोई बटन क्लिक करने पर हम जावा स्विंग एप्लिकेशन को बंद करना चाहते हैं, तो मुझे किस विधि का उपयोग करना चाहिए?

+0

चाहते हैं बटन क्लिक करें। System.exit (0) के साथ स्टैंडअलोन जेबटन के बारे में है या JFrames टूलबार में बटन से – mKorbel

+0

@mKorbel: पहला विकल्प – Adil

उत्तर

46

System.exit(); जावा वीएम को पूरी तरह से समाप्त करने का कारण बनता है।

JFrame.dispose();JFrame विंडो को नष्ट करने और ऑपरेटिंग सिस्टम द्वारा साफ करने का कारण बनता है। documentation के मुताबिक, जावा वीएम को समाप्त करने का कारण बन सकता है यदि कोई अन्य विंडोज उपलब्ध नहीं है, लेकिन इसे वास्तव में मानक के बजाए साइड इफेक्ट के रूप में देखा जाना चाहिए।

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

+0

सिस्टम.एक्सिट के साथ जो समस्या मैं देखता हूं वह यह है कि यह वास्तव में एप्लिकेशन को मारता है, भले ही कोई धागा है, उदाहरण के लिए, लेखन एक पंक्ति। ऐसा लगता है कि अधिकांश अनुप्रयोगों को पूरा करने के लिए बाकी धागे की प्रतीक्षा करने से खिड़की को बंद कर दिया जाता है। लेकिन चूंकि एडब्ल्यूटी थ्रेड पूरा नहीं हो सकते हैं, इसलिए हमें जावा में इसे ठीक से कार्यान्वित करने में समस्या है। –

10

JFrame.dispose()

public void dispose() 

विज्ञप्ति अपने स्वामित्व वाली बच्चों की इस विंडो, इसके उप-घटक द्वारा प्रयोग किया जाता देशी स्क्रीन संसाधनों के सभी, और सब। यही है, इन घटकों के संसाधनों को नष्ट कर दिया जाएगा, वे जो भी स्मृति उपभोग करते हैं उन्हें ओएस में वापस कर दिया जाएगा, और उन्हें अपरिहार्य के रूप में चिह्नित किया जाएगा। खिड़की और इसके उपमहाद्वीपों को मूल संसाधनों को फिर से पैक करने या दिखाने के लिए बाद में कॉल के साथ प्रदर्शित किया जा सकता है। पुनर्निर्मित विंडो और उसके उपमहाद्वीपों के राज्य इस बिंदु के उन राज्यों के समान होंगे जहां खिड़की का निपटारा किया गया था (उन कार्यों के बीच अतिरिक्त संशोधन के लिए लेखांकन नहीं)।

नोट: जब जावा वर्चुअल मशीन (वीएम) के भीतर अंतिम प्रदर्शित विंडो का निपटारा किया जाता है, तो वीएम समाप्त हो सकता है। अधिक जानकारी के लिए एडब्ल्यूटी थ्रेडिंग मुद्दे देखें।

System.exit()

public static void exit(int status) 

वर्तमान में चल रहे जावा वर्चुअल मशीन समाप्त हो जाता है। तर्क एक स्टेटस कोड के रूप में कार्य करता है; सम्मेलन द्वारा, एक nonzero स्थिति कोड असामान्य समाप्ति इंगित करता है। यह विधि कक्षा रनटाइम में निकास विधि को कॉल करती है। यह विधि सामान्य रूप से कभी नहीं लौटती है।

कॉल System.exit(n) प्रभावी रूप से कॉल के बराबर है:

Runtime.getRuntime().exit(n) 
5

आप उपरोक्त के अतिरिक्त System.exit() उपयोग कर सकते हैं एक निकास कोड जो बहुत usuefull विशेष रूप से हो सकता है आपके प्रक्रिया स्वचालित रूप से बुला यदि का उपयोग कर वापस जाने के लिए में System.exit(code); यह उदाहरण के लिए निर्धारित करने में आपकी सहायता कर सकता है यदि रन के दौरान कोई त्रुटि हुई है।

3
  • आपने एकाधिक विंडो खोली है और केवल एक ही है कि बंद उपयोग JFrame.dispose().

  • आप सभी विंडो बंद करें और समाप्त करना चाहते हैं था बंद करने के लिए आवेदन पर इस्तेमाल System.exit()