سؤال

لدي سؤال حول "موضوع إرسال الأحداث". لدي فئة رئيسية هي أيضا Jframe. إنه يقوم بتشغيل بقية المكونات في الكود ، وبعضها لا ينطوي على التأرجح وبعضها يفعل. هل يكفي ببساطة تهيئة الفئة الرئيسية باستخدام EDT مثل هذا؟ ...

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new Main();
        }
    });
}

وبهذه الطريقة ، سيتم تشغيل كل شيء على موضوع مرسل الأحداث.

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

المحلول

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

يمكنك اختبار ما إذا كنت تنفذ على EDT مع:

    if (SwingUtilities.isEventDispatchThread()) {
        // Yes, manipulate swing components
    } else {
        // No, use invokeLater() to schedule work on the EDT
    }

أيضا ، انظر Swingworker الفصل للحصول على تفاصيل حول كيفية تسليم العمل إلى موضوع خلفية ونتائج العملية على EDT

نصائح أخرى

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

هذه هي الطريقة التي تعمل بها جميع الأمثلة من عمل Sun Tutorial. اقرأ القسم من البرنامج التعليمي المتأرجح التزامن لمزيد من المعلومات حول سبب القيام بذلك بهذه الطريقة.

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

إليك كيف أبدأ جميع تطبيقات التأرجح.

import javax.swing.SwingUtilities;

import com.ggl.source.search.model.SourceSearchModel;
import com.ggl.source.search.view.SourceSearchFrame;

public class SourceSearch implements Runnable {

    @Override
    public void run() {
        new SourceSearchFrame(new SourceSearchModel());

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SourceSearch());
    }

}

يمكنك نسخ هذا إلى كل مشروع التأرجح ، فقط عن طريق تغيير الأسماء.

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