سؤال

لدي 3 كائنات تمتد JFrame دعنا نسميهم FrameA FrameB FrameC.

FrameA هي نافذة تطبيقي الرئيسية. من FrameAمنشئ إذا لم يتم تسجيل التطبيق FrameB و FrameC. وبعد هم فقط منبثق يشير إلى الفترة التجريبية.

2 مرات من بين 10 تطبيق يتجمد ولا يظهر أبدا BNC ACC C والإطار يصبح لا يستجيب.

كنت أتساءل عما إذا كان هناك تأثير جانبي لإنشاء إطارات في هذه الأزياء؟

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

المحلول

هذا لأنك لا تدع FRAMEA إنهاء عملية البناء، فأنت تقاطعها ثم في نفس الخيط الذي يعرض هذين الإطارات الأخرى.

أود أن أقترح تغيير استراتيجيتك واستخدام طريقة المصنع وربما بالاقتران مع طريقة swindudities.invokelater.

دعونا نقول أن لديك شيء مثل:

 public static void main( String [] args ) {
      JFrame a = new FrameA(); // Has both display logic and trial "pop up" logic
 }

تغييره ل:

 public static void main( String [] args ) {
      JKFrame a = FrameA.createFrame(); // the same but splited like the following code 
 }


 class FrameA extends JFrame {
      // new method
      public static JFrame createFrame() {
            return new FrameA();  

      }
 }

لا شيء غيرك فقط أضفت طريقة المصنع، في وقت لاحق يمكنك:

         public static JFrame createFrame() {
            if( thatSpecialLogicSaysItIsTrialAndShouldPopUp() ) {
                  JFrame b = new FrameB();
                  b.setVisible( true );
                  JFrame c = new FrameC();
                  c.setVisible( true );
                  return new FrameA();

           } else {
            return new FrameA();
           }  

      }

ما سوف تفعله في الرمز الثاني هو منفصل المنطق من منشئ الطبقة ووضعه في طريقة المصنع. بهذه الطريقة إذا thatspeciallogicsissitiTralandshouldpopup. إرجاع TRUE، أنت تعرض B و C

يمكنك أيضا وصفها باستخدام JDIALOG هناك، ولكن ستذهب إلى حد كبير المشكلات عند فصل المسؤوليات.

نصائح أخرى

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

(على الرغم من أنني أتفق مع كل شخص آخر في مؤشر الترابط الذي يجب عليك سحب منطق إطلاق الإطار إلى مكان آخر - ومع ذلك - لا يوجد شيء "غير آمن" حول منشئ الإطار المتصلين من منشئ إطار آخر - فهي لا تختلف عن أي منشئ آخر. قد يكون الأمر سيئا - ولكن لا ينبغي أن يقوم بإغلاق مؤشر ترابط الحدث.)

الخاص بك تريد استخدام jdialog. مصنوعة للقيام بهذا الشيء بالضبط.

يجب أن تفكر في منطقك. إنشاء إطارات جديدة في منشئ إطار آخر يبدو غريبا. إذا قمت بذلك في المنشئ - وهذا يعني أن الإطار الأول لا يظهر بعد. لماذا لا تظهر لك الإطار B و C خارج إطار المنشئ - منطقيا يبدو أنه نفسه. ولكن بعد ذلك اعتمادا على ظروفك، يمكنك إنشاء إطار A وتعيينه مرئيا.

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