هل من الآمن إنشاء عناصر واجهة مستخدم Swing/AWT ليس في سلسلة إرسال الحدث؟

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

سؤال

لقد تم دمج مادة الشكل والمظهر في تطبيقي وواجهت العديد من المشكلات المتعلقة بإجراءات التحقق الداخلية من EDT (مؤشر إرسال الأحداث).يرفض Substance تمامًا إنشاء فئات واجهة المستخدم خارج نطاق EDT.لقد قمت بالكثير من Swing/AWT وأعرف معظم القواعد المتعلقة بـ EDT.أستخدم SwingWorker، SwingUtilties.invocLater لتعديل المكونات.أنا دائما على الرغم من أن هذه المكونات يمكن أن تكون إنشاؤه خارج بتوقيت شرق الولايات المتحدة، ولكن يجب أن يكون أدرك و التلاعب بها على بتوقيت شرق الولايات المتحدة.بمعنى آخر، يمكنك إنشاء الإعدادات الافتراضية وإعدادها في الخلفية، لكن استدعاء pack/setVisible يجب أن يكون EDT بالإضافة إلى أي استدعاءات لاحقة لمعالجة المكون.

سبب سؤالي هو أن لدي نافذة "سمينة" خاصة للإنشاء، تتضمن العديد من الأدوات والحالة والموارد (الكثير من الرموز).في السابق، قمت بإنشاء النافذة على طريقة الخلفية لـ SwingWorker وجعلت النافذة مرئية في الطريقة المنجزة.لم اواجه مشكلة قط.عند التبديل إلى Substance، أذهلني فحص EDT الداخلي.

لقد تمكنت من إعادة بناء الكود للتغلب على هذا.يمكنني البناء على EDT وهو ليس حلاً جيدًا نظرًا لأن التطبيق بأكمله سيتم حظره.يمكنني أيضًا إعادة البناء بشكل أكبر وبذل قصارى جهدي لتحميل جميع الموارد الإضافية خارج EDT.

قم بتغليفه ...هل هي آمنة ل بناء عناصر واجهة المستخدم Swing/AWT ليست في موضوع إرسال الحدث؟

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

المحلول

قامت شركة Sun بتغيير القواعد في عام 2004 - في السابق، كان مسموحًا لك بإنشاء مكونات خارج EDT ولم يكن عليك الانتقال إلى EDT إلا بعد أن يتم تركيب المكون. أدرك.

وتنص القاعدة الجديدة الآن على ما يلي:

لتجنب إمكانية حدوث طريق مسدود ، يجب أن تهتم بشدة بمكونات ونماذج التأرجح مخلوق، وتعديل ، والاستعلام فقط من موضوع تنظيم الأحداث.

هذا يقدم منشور المدونة الخاص بي مزيدًا من التفاصيل، بما في ذلك روابط لمقالات أخرى ذات صلة.علما أن جميع الشمس الرسمية أمثلة تمت إعادة كتابتها وهي صارمة للغاية بشأن هذا الأمر.

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

نصائح أخرى

لا.

السبب البسيط هو أنه حتى EDT يحب الوصول إلى طريق مسدود في بعض الحالات النادرة، وبشكل عام، من السهل الوصول إلى طريق مسدود لواجهة المستخدم عند استخدام Swing (أو هكذا قيل لي).أقترح عليك قراءة هذه المقالات الثلاثة من مدونة Kirill (the Substance dev):

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