java उनल क्या मुझे स्पष्ट रूप से सिस्टम। एक्सट() को एक वेबस्टार्ट अनुप्रयोग में कॉल करना है?




मोबाइल कॉल रिकॉर्डिंग अदालतों में स्वीकार्य हैं (4)

हाल ही में मैंने एक स्विंग एप्लिकेशन को वेबस्टार्ट में बदल दिया। प्रक्रिया बहुत सरल थी, लेकिन मुझे पता चला कि मेरे पास सभी खिड़कियां बंद करने के बाद, मेरे आवेदन की जेवीएम समाप्त नहीं हुई। थ्रेड डंप ने दिखाया कि कुछ गैर-डेमन धागे हैं, विशेष रूप से स्विंग का EDT, AWT और कुछ वेबसाईट संबंधित धागे।

इस्तेमाल की गई वास्तविक रणनीति यह है कि प्रत्येक विंडो एक काउंटर को बढ़ाता है जब इसे बनाया जाता है और जब इसे बंद किया जाता है तो उसे घटाया जाता है। डिफ़ॉल्ट बंद ऑपरेशन DISPOSE_ON_CLOSE है वेन काउंटर शून्य तक पहुंचता है, मैं सभी थ्रेडपूल रोकता हूं और सभी जेएनआई संसाधनों को रिलीज़ करता हूं।

जब मैंने बैट फ़ाइल से आवेदन शुरू किया (उसी Jars), यह ठीक हो गया जब सभी विंडो बंद हो गई थी, इसलिए मैंने सोचा कि समस्या में वेबस्टार्ट के साथ कुछ है।

अब सवाल:

  1. क्या कोई मुझे बता सकता है कि वास्तव में क्या हो रहा है? क्यों वेबस्टार्ट ज़ोंबी जेवीएम छोड़ती है?
  2. क्या जावास्टॉप को रोकने के बिना वेबस्टार्ट संसाधनों को स्पष्ट रूप से जारी करने का एक तरीका है?
  3. मुझे हमेशा यह राय थी कि System.exit () को कॉल करने से आपके संसाधनों को जारी नहीं करने और आपके बाद साफ करने के लिए ओएस पर भरोसा करने के ढलानिक अभ्यास को प्रोत्साहित किया जाता है (जो आपको बाद में कोड का पुन: उपयोग करने पर बुरा आश्चर्य हो सकता है) ... क्या मैं कुछ भूल रहा हूँ?

ऐप Webstart द्वारा लॉन्च किया गया है या नहीं यह पता लगाने के लिए फॉलो-अप प्रश्न भी देखें।


मैं वेब शुरुआत के साथ एक ही समस्या का अनुभव करता हूं अगर मैं जावा कंसोल को बंद कर देता हूं, तो प्रक्रिया बंद नहीं होती है सूर्य से कोई ज्ञात बग आईडी?


वेबस्टार्ट में कीड़े की वजह से, हाँ वेबस्टार्ट अपने स्वयं के प्रयोजनों के लिए एक "सुरक्षित धागा" प्रारंभ करता है जो ईडीटी के साथ इंटरैक्ट करता है। यह सिक्योरथ्रेड जावा प्रक्रिया की स्वचालित समाप्ति को रोकता है जो सभी विंडो और एडब्ल्यूटी संसाधनों का निपटारा करेगा।

अधिक जानकारी के लिए देखें http://www.pushing-pixels.org/?p=232


वेबस्टार्ट कंसोल विंडो शुरू होती है (आप उसे अक्षम कर सकते हैं)। कंसोल विंडो का इस्तेमाल वेबस्टार्ट प्रक्रिया के साथ ही मूल लॉग / डीबग के stdout / err देखने के लिए किया जाता है, लेकिन इसके शीर्ष-स्तर एडब्ल्यूटी / स्विंग विंडो को बनाए रखने का साइड इफेक्ट है। चूंकि ए.डब्ल्यूटी / एडीटी केवल आखिरी खिड़की का निपटान करते समय समाप्त होता है, कंसोल खिड़की आपके आवेदन को पकड़ रही है। आपको संभवतः System.exit () को 100% आश्वस्त होना चाहिए कि आपका एप्लिकेशन निकल जाता है (जब तक कि आप एक निश्चित क्लाइंट कॉन्फ़िगरेशन को गारंटी नहीं दे सकते, तो वेबस्टार्ट कंसोल बंद हो जाता है)


Jconsole से जुड़ने पर विचार करें और देखें कि जेवीएम क्या कर रहा है







java-web-start