سؤال

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

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

في بلدي التجارب، والانتقال إلى أرجوحة لم تساعد في حل مشكلتي.

وبالمناسبة، هذا هو تبسيط مشاركتي السابقة (أكثر تعقيدا): <وأ href = "https://stackoverflow.com/questions/184491/java-applet-awt-refresh-problem-mac-os -x-104 "> برنامج Java، AWT التحديث مشكلة ماك OS X 10.4

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

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

المحلول

وهذا يحدث في كل وقت إذا كنت لا ترغب في البرمجة بعناية في AWT / سوينغ.

وأولا وقبل كل شيء، يجب ان تفعل ALL العمل على موضوع الحدث. هذا يعني أنك لا تستطيع أن تفعل أي من ذلك في بيان الرئيسي الخاص بك (أو أي شيء يدعو مباشرة). أنا أعرف كل التطبيق جافا واجهة المستخدم الرسومية اخترع من أي وقت مضى يخالف هذه القاعدة، ولكن هذا هو القاعدة.

وبالنسبة للجزء الأكبر، كانوا يقولون هل يمكن استخدام موضوع غير الهجوم الجوي حتى "محققة" النافذة (حزمة / setVisible)، ولكن أحسب الشمس إلى أن لم تنجح دائما.

والثانية، عندما تحصل على الحدث على موضوع الهجوم الجوي، كن متأكدا من العودة بسرعة. أبدا النوم أو تنفيذ عملية طويلة.

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

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

نصائح أخرى

وطريقة لاستخدام لهذا النوع من المشكلة هو إعادة رسم، كما كنت قد ذكرت. فمن الممكن أنك ترى مشكلة مع JVM الذي تستخدمه. أود أن أوصى باستخدام إصدارات مختلفة من الشمس JVM وحتى MS VM لIE لمعرفة ما إذا هذه مشكلة VM ذات الصلة - قد يكون في الواقع لا علاقة لها الشفرة

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

وإذا لم تكن متأكدا يرتبط هذا ما كنت قد رأيت، ولكن إذا كنت تحصل على ما يصل ضد أداء AWT الحدث بعدين في 2D جافا + العالم 3D (الرسومات الناس خط الأنابيب) سوف نشير إلى استراتيجية مترابطة ثم " سوف ندخل في مشكلة التصرف.

تم تبحث هذه المناقشة في التصاميم توظيف AWT حدث انتظار للرسومات، كما هو الحال في استخدام "إعادة رسم".

في النهج مترابطة، هناك مشكلة إيقاف التشغيل.

وملاحظات في جافا / الهجوم الجوي / SequencedEvent ل "التخلص" يوجهنا إلى "AWT قضايا خيوط" و "تحنيل".

وأنا أفكر أن هذا قليلا من المعلومات يخدم على الأقل إلى التركيز المشكلة.

وكنت قادرا على إصلاح 99٪ من بلدي AWT الصغير رسم القضايا عن طريق التحول إلى أرجوحة. يبدو البديل لتكون أكثر موثوقية على منعش.

كان

وفي وقت سابق لدي الكثير من إعادة الرسم اليدوي () في شفرة صغير بلدي، ولكن مع سوينغ أزيلت هذه والصغير هو الآن أسرع خصوصا في ظل الملقم الطرفي / LTSP.

وأنا وضعت الاشياء حرجة داخل هذا:

public class VeryFastPanel extends JPanel {



    /**
         *
         */
        private static final long serialVersionUID = 1L;

        public void update(Graphics g) {

      paint(g);
    }

}

ولقد وجدت القضية التي يبدو أن تكون هي نفسها التي تعاني منها. بعد بعض التجارب، اكتشفت أن هذا يمكن أن تكون ذات صلة ايرو وإنتل الرسومات محولات. في حالتي، توقف تطبيق طلاء فقط عند استخدامها في أجهزة الكمبيوتر المحمولة دون محولات AC، التي تعمل بالبطاريات. إذا تم تعطيل بعض ميزات توفير الطاقة في التكوين سائق إنتل (لا سيما إنتل 2D عرض التكنولوجيا في الإصدارات القديمة سائق) سوف جافا إعادة رسم بشكل طبيعي مرة أخرى.

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

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