هل يجب أن بشكل صريح استدعاء النظام.exit() في Webstart التطبيق ؟

StackOverflow https://stackoverflow.com/questions/212009

  •  03-07-2019
  •  | 
  •  

سؤال

مؤخرا أنا تحويلها أرجوحة تطبيق Webstart.العملية واضحة جدا, ولكنني وجدت أنه بعد إغلاق جميع نوافذ التطبيق الخاص بي JVM لم إنهاء.موضوع تفريغ أظهرت أن هناك زوجين من غير الخفي المواضيع أبرزها البديل بتوقيت شرق الولايات المتحدة ، AWT و بعض websart ذات المواضيع.

الفعلية الاستراتيجية المستخدمة هي أن كل نافذة الزيادات العداد عند إنشائه والتناقصات واحد عندما يتم إغلاقه.الافتراضي إغلاق العملية DISPOSE_ON_CLOSE.ون العداد إلى الصفر أتوقف عن كل threadpools والإفراج عن جميع JNI الموارد.

عندما أطلقت التطبيق من bat (نفس الجرار) ، إنهاء بخير عندما تكون جميع النوافذ مغلقة ، حتى ظننت أن المشكلة قد تفعل شيئا مع Webstart.

الآن الأسئلة:

  1. أي شخص يمكن أن يقول لي ما الذي يحدث بالضبطلماذا Webstart ترك غيبوبة JVMs?
  2. هل هناك طريقة الإفراج عن Webstart الموارد صراحة دون وقف JVM?
  3. لقد كان دائما يرى أن نظام الاتصال.exit() تشجع قذرة ممارسة عدم الإفراج عن الموارد الخاصة بك تعتمد على نظام التشغيل لتنظيف بعد (والتي يمكن أن تؤدي إلى مفاجآت سيئة إذا كنت إعادة استخدام التعليمات البرمجية في وقت لاحق)...أنا في عداد المفقودين شيئا ؟

انظر أيضا متابعة السؤال للكشف عن ما إذا كان تم إطلاق التطبيق من قبل Webstart.

هل كانت مفيدة؟

المحلول

بسبب الخلل في WebStart ، نعم.WebStart يبدأ "آمنة موضوع" الخاصة به الأغراض التي تتفاعل مع EDT.هذا SecureThread يمنع التلقائي إنهاء عملية جافا يتوقع المرء عند جميع النوافذ AWT الموارد التخلص منها.

لمزيد من المعلومات انظر http://www.pushing-pixels.org/?p=232

نصائح أخرى

AWT بتوقيت شرق الولايات المتحدة عادة ما يكون الجاني.منذ سنوات كان بعض المنطق إيقاف التشغيل عندما لا يكون هناك undisposed ويندوز.ومع ذلك ، هناك المشاكل المتكررة مع التسريبات ، بما في ذلك في إطار تنفيذ AWT والبديل.لذلك, أقترح بشدة استخدام النظام.الخروج في إنتاج النشرات (ربما قد ترغب في ترك الأمر لبعض اختبار للكشف عن التسريبات).

على WebStart موضوع يجب أن يكون كل شيطان عندما لا يكون هناك نظام ويندوز (وحدة ، javax.jnlp الخدمات وغيرها من الحوارات) تظهر.

Webstart يبدأ في إطار وحدة التحكم (كنت قد تكون قادرة على تعطيل ذلك).إطار وحدة التحكم يستخدم لرؤية المعياري/يخطئ من webstart العملية فضلا عن بدائية سجل/debug ولكن لديه تأثير الجانب من خلق أعلى مستوى AWT/البديل النافذة.منذ AWT/بتوقيت شرق الولايات المتحدة فقط ينتهي عند النافذة الماضي التصرف إطار وحدة التحكم هو يمسك التطبيق الخاص بك.ربما يجب عليك استدعاء النظام.exit() أن تكون 100 ٪ على يقين من التطبيق الخاص بك مخارج (إلا إذا كنت يمكن أن جرانت معين العميل التكوين ، webstart وحدة إيقاف)

النظر في ربط مع jconsole والحصول على نظرة على ما JVM يقوم به.

أنا واجهت نفس المشكلة مع ويب.إذا كنت إيقاف تشغيل جافا تحكم عملية لا شنق.أي علة معروفة الهوية من الشمس ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top