سؤال

إم استدعاء إنفوكيلاتر ديريكلي من زر على أكتيونبيرفد مع هذا الرمز:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            int temp = (jComboBox1.getSelectedIndex() + 1);
        heavyProccesingFunction();
        }
   });
} 

وهذا لا يزال يجمد واجهة المستخدم الرسومية.لم؟أحصل على نفس النتيجة دون استخدام وظيفة إنفوكيلاتر.

يجب أن أستخدم

Thread queryThread = new Thread() {
      public void run() { 

في حين أن?

تحرير:

شكرا ، يجب استخدام موضوع جديد.

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

المحلول

invokeLater لا يزال ينتهي تشغيل التعليمات البرمجية على موضوع المرسل-في وقت لاحق فقط.الهدف من invokeLater هو السماح معلومات أساسية المواضيع لنشر العمل على موضوع مرسل الحدث.

يبدو أنه يجب عليك بالفعل إنشاء مؤشر ترابط آخر - أو استخدام تجمع مؤشر ترابط لنفس النوع من التأثير ، أو SwingWorker على سبيل المثال.مهما فعلت ، تحتاج إلى تجنب تشغيل طريقة بطيئة على موضوع المرسل الحدث.

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