سؤال

أنا لست مطور Java ، لكنني بحاجة إلى كتابة تطبيق صغير لتحميل ملف عبر FTP (في الواقع ، أنا مطور ويب). كل شيء يعمل بشكل جيد ، باستثناء طريقة عرض رسائل التعليقات. اسمحوا لي أن أشرح مع مثال:

إذا كتبت Sometingh من هذا القبيل ، داخل طريقة (يتم التحكم فيها بواسطة حدث نقرة)

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

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

يبدو لي أن طريقة setText JPanel يتم تخزينها بطريقة ما.
كيف يمكنني عرض الرسائل في الوقت الفعلي؟

(لقد حاولت القيام system.out.println للاختبار وعملت بشكل رائع!)
شكرًا

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

المحلول

إذا كتبت Sometingh مثل هذا داخل طريقة (يتم التحكم فيها بواسطة حدث نقرة)

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

اقرأ القسم من البرنامج التعليمي المتأرجح التزامن لمزيد من المعلومات وللحل. الحل الأساسي هو إنشاء مؤشر ترابط منفصل للمهمة الطويلة المدى.

هذا هو السبب أيضًا في أن system.out.println (..) يعمل ، لأنه ينفذ على موضوع مختلف.

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