سؤال

لماذا إذا قمت بإنشاء JFrame ، فلا يزال البرنامج يعمل حتى (أي) أغلقه مع "زر الخروج" الصغير للنافذة؟

بحثت عن هذه الإجابة وفشلت. الشيء الوحيد الذي خمنته هو أنه عندما أفعل new JFrame() إنه مثل خاص new, ، يحتفظ ذلك مرجعًا للكائن في EDT ، لذلك سيتم الرجوع إليه دائمًا (حتى لو كان "جديدًا" مجهولًا) ولن يتم حذفه بواسطة جامع القمامة. ثم بمجرد أن يتم تشغيل حدث Windows Close ، يتم إزالة الكائن وتدميره.

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

المحلول

محاولة، yourFrame.setCloseOperation(JFrame.EXIT_ON_CLOSE).

والسبب في استمرار تشغيله هو أن مؤشر ترابط الإرسال الذي يسمى ما يسمى بالركض في الخلفية ، وطالما أن لديك مؤشرات ترابط غير Daemon ، فلن ينتهي التطبيق. من مستندات الموضوع:

عندما يبدأ جهاز Java Virtual ، عادة ما يكون هناك خيط واحد غير Daemon (والذي يدعو عادة الطريقة المسماة الرئيسية لبعض الفئات المعينة). يستمر جهاز Java Virtual في تنفيذ مؤشرات الترابط حتى يحدث أي مما يلي:

  • تم استدعاء طريقة خروج وقت تشغيل الفصل وسمح مدير الأمن بتجري عملية الخروج.
  • توفيت جميع المواضيع التي لا تكون خيوط الخفي ، إما عن طريق العودة من المكالمة إلى طريقة التشغيل أو عن طريق إلقاء استثناء ينتشر خارج طريقة التشغيل.

انها ليست خلق من jframe الذي ينطلق "gui-throad". يبدأ هذا الموضوع عندما يصبح الإطار مرئيًا وربما يحتاج إلى إرسال الأحداث.

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