दिलचस्प पोस्ट
एकता 3 डी यूआई, एक आइटम खींचने की स्थिति के लिए गणना? कैसे एक unordered सूची में आइटम जोड़ने के लिए <ul> jquery का उपयोग कर Xcode 6 अजीब बग: इंटरफ़ेस बिल्डर फ़ाइल में अज्ञात वर्ग Backbone.js – Backbone.sync या jQuery.ajax में एक संपूर्ण संग्रह सहेजने के लिए "कैसे"? फ्लेक्स-बॉक्स: पिछली पंक्ति को ग्रिड में संरेखित करें JOIN और इनर जॉइन के बीच का अंतर मैं प्रोग्राम की फाइल अनुमतियों को कैसे बदलूं? क्या करता है? मैं 64 बिट ऑपरेटिंग कैसे गुणा और 128 बिट परिणाम पोर्टेबल प्राप्त कर सकता हूँ? गणना के साथ समूह के साथ Linq ए 1 से वास्तविक अंतिम उपयोग किए गए सेल में रेंज लौटें बाश से "समूह" का अनुकरण करने का सर्वोत्तम तरीका? यह इनलाइन ब्लॉक तत्व में ऐसी सामग्री क्यों है जो खड़ी संरेखित नहीं है गतिशील JComboBoxes हेक्सागन मास्क के साथ UIImage के कोनों को कैसे गोल करना है I

कोड से जावा स्विंग एप्लिकेशन को बंद कैसे करें

कोड से स्विंग एप्लिकेशन को समाप्त करने का सही तरीका क्या है, और क्या नुकसान हैं?

मैंने टाइमर की आग के बाद स्वचालित रूप से अपना आवेदन बंद करने की कोशिश की थी। लेकिन बस JFrame पर dispose() को बुला रहा था कि चाल नहीं हुई – खिड़की गायब हो गई, लेकिन एप्लिकेशन समाप्त नहीं हुआ। हालांकि क्लोज़ बटन के साथ विंडो को बंद करते समय, एप्लिकेशन समाप्त होता है। मुझे क्या करना चाहिए?

Solutions Collecting From Web of "कोड से जावा स्विंग एप्लिकेशन को बंद कैसे करें"

आपकी JFrame डिफ़ॉल्ट बंद कार्रवाई EXIT_ON_CLOSE बजाय " DISPOSE_ON_CLOSE " पर सेट की जा सकती है (क्यों लोग EXIT_ON_CLOSE का उपयोग करते रहते हैं) मेरे पास हैं

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

सबसे आम अपराधियों java.util.Timer हैं और कस्टम थ्रेड आप बनाया है दोनों को डेमन पर सेट किया जाना चाहिए या उन्हें स्पष्ट रूप से मारना चाहिए।

यदि आप सभी सक्रिय फ़्रेमों की जांच करना चाहते हैं, तो आप Frame.getFrames() उपयोग कर सकते हैं। यदि सभी विंडोज / फ्रेम्स का निपटारा किया जाता है, तो अब भी चल रहे किसी गैर-डेमन थ्रेड के लिए डिबगर का उपयोग करें।

मुझे लगता है एक EXIT_ON_CLOSE

 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

इससे पहले कि System.exit(0) बेहतर है क्योंकि आप वास्तव में एप को छोड़ने से पहले कुछ सफाई कार्यों को बनाने के लिए विंडो श्रोता लिख सकते हैं।

वह विंडो श्रोता आपको परिभाषित करने की अनुमति देता है:

 public void windowClosing(WindowEvent e) { displayMessage("WindowListener method called: windowClosing."); //A pause so user can see the message before //the window actually closes. ActionListener task = new ActionListener() { boolean alreadyDisposed = false; public void actionPerformed(ActionEvent e) { if (frame.isDisplayable()) { alreadyDisposed = true; frame.dispose(); } } }; Timer timer = new Timer(500, task); //fire every half second timer.setInitialDelay(2000); //first delay 2 seconds timer.setRepeats(false); timer.start(); } public void windowClosed(WindowEvent e) { //This will only be seen on standard output. displayMessage("WindowListener method called: windowClosed."); } 

प्रयत्न:

 System.exit(0); 

क्रूड, लेकिन प्रभावी

सुरक्षित तरीका कुछ ऐसा हो सकता है:

  private JButton btnExit; ... btnExit = new JButton("Quit"); btnExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ Container frame = btnExit.getParent(); do frame = frame.getParent(); while (!(frame instanceof JFrame)); ((JFrame) frame).dispose(); } }); 

निम्नलिखित प्रोग्राम में कोड शामिल होता है जो किसी प्रोग्राम को बिना बाहरी थ्रेड्स की कमी के बिना सिस्टम। एक्सट () को कॉल करना बंद कर देता है। इस उदाहरण को थ्रेड / श्रोताओं / टाइमर / आदि का उपयोग करने के लिए आवेदन करने के लिए, एक को केवल आवश्यकता के लिए क्लीनअप कोड दर्ज करने की आवश्यकता है (और, यदि लागू हो, प्रतीक्षा की जाती है) तो विंडोएवेंट मैन्युअल रूप से कार्रवाई के भीतर शुरू होने से पहले कार्यप्रणाली ()।

जो लोग प्रतिलिपि / पेस्ट कोड को ठीक से दिखाए जाने में सक्षम बनाने की इच्छा रखते हैं, अंत में एक थोड़ा-बदसूरत लेकिन अन्यथा अप्रासंगिक मुख्य पद्धति शामिल की जाती है।

 public class CloseExample extends JFrame implements ActionListener { private JButton turnOffButton; private void addStuff() { setDefaultCloseOperation(DISPOSE_ON_CLOSE); turnOffButton = new JButton("Exit"); turnOffButton.addActionListener(this); this.add(turnOffButton); } public void actionPerformed(ActionEvent quitEvent) { /* Iterate through and close all timers, threads, etc here */ this.processWindowEvent( new WindowEvent( this, WindowEvent.WINDOW_CLOSING)); } public CloseExample() { super("Close Me!"); addStuff(); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { CloseExample cTW = new CloseExample(); cTW.setSize(200, 100); cTW.setLocation(300,300); cTW.setVisible(true); } }); } } 

अगर मैं आपको सही ढंग से समझता हूं तो आप एप्लिकेशन को बंद करना चाहते हैं भले ही उपयोगकर्ता ने बंद बटन पर क्लिक न किया हो। आपको विंडोईवेंट्स को शायद एडवंडलिस्टनर () या सक्षम ऐवेंट्स () के साथ पंजीकृत करना होगा जो आपकी आवश्यकताओं को बेहतर ढंग से उपयुक्त मानते हैं।

आप तब ईवेंट को कॉल करने की प्रक्रिया के साथ कॉल कर सकते हैं WindowEvent () यहां एक नमूना कोड है जो JFrame बनायेगा, 5 सेकंड की प्रतीक्षा करें और उपयोगकर्ता इंटरैक्शन के बिना JFrame को बंद करें।

 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ClosingFrame extends JFrame implements WindowListener{ public ClosingFrame(){ super("A Frame"); setSize(400, 400); //in case the user closes the window setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); //enables Window Events on this Component this.addWindowListener(this); //start a timer Thread t = new Timer(); t.start(); } public void windowOpened(WindowEvent e){} public void windowClosing(WindowEvent e){} //the event that we are interested in public void windowClosed(WindowEvent e){ System.exit(0); } public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} //a simple timer class Timer extends Thread{ int time = 10; public void run(){ while(time-- > 0){ System.out.println("Still Waiting:" + time); try{ sleep(500); }catch(InterruptedException e){} } System.out.println("About to close"); //close the frame ClosingFrame.this.processWindowEvent( new WindowEvent( ClosingFrame.this, WindowEvent.WINDOW_CLOSED)); } } //instantiate the Frame public static void main(String args[]){ new ClosingFrame(); } } 

जैसा कि आप देख सकते हैं, प्रक्रिया WindowEvent () विधि WindowClosed घटना को निकाल दिया जाता है, जहां आपके पास अनुप्रयोग को बंद करने से पहले कुछ क्लीन अप कोड करने के लिए कोई आधिकार है।

ओरेकल दस्तावेज़ीकरण पर एक नज़र डालें।

जेडीके 1.4 से शुरू करते हुए एक आवेदन समाप्त हो जाता है अगर:

  • कोई प्रदर्शन योग्य AWT या स्विंग घटकों नहीं हैं।
  • मूल घटना कतार में कोई देशी घटनाएं नहीं हैं।
  • जावा ईवेंट क़ुएं में कोई ऐडब्ल्यूटी घटनाएं नहीं हैं।

Cornercases:

दस्तावेज बताता है कि कुछ पैकेज डिस्प्लेबल घटकों को बिना रिहा किए गए। टूलकिट.getDefaultToolkit () कॉल करने वाला एक प्रोग्राम समाप्त नहीं होगा। एक उदाहरण के रूप में दी गई अन्यों में से है

इसके अलावा अन्य प्रक्रियाएं ऐडब्ल्यूटी जी को जीवित रख सकती हैं, जब वे किसी कारण के लिए, स्थानीय घटना कतार में घटनाएं भेज रहे हैं।

इसके अलावा मैंने देखा कि कुछ सिस्टमों पर यह वास्तव में समाप्त होने से पहले एक युग्मक का सेकंड लेता है।

मुझे लगता है, यह विचार यहां विंडोलिस्टनर है – आप वहां कोई भी कोड जोड़ सकते हैं, जिसे आप चीज़ों से बन्द होने से पहले भागना चाहते हैं

अन्य टिप्पणियों के जवाब में, DISPOSE_ON_CLOSE ठीक से आवेदन से बाहर निकलने में प्रतीत नहीं होता है – यह केवल विंडो को नष्ट करता है, लेकिन आवेदन चलते रहेंगे यदि आप एप्लिकेशन का उपयोग EXIT_ON_CLOSE समाप्त करना चाहते हैं