تمرير المتغيرات إلى موضوع إرسال الحدث
-
09-09-2019 - |
سؤال
أحب واجهة المستخدم الرسومية لأعلى لأنني بحاجة إلى تحديثه من خلال EDT، ومع ذلك، أحتاج أيضا إلى اجتياز متغير يجري تحديثات GUI:
while ((message = this.in.readLine()).startsWith("NUMPLAYERS"))
{
numOfPlayers = Integer.parseInt(message.split(":")[1]);
numPlayers.setText("There are currently " + numOfPlayers + " players in this game");
}
هذا لا يعمل. أحتاج إلى تعيين النص الموجود في EDT لكن لا يمكنني تمرير numofplayers له دون إعلانه كآخر نهائي (لا أريد أن أفعله، لأنه تغير كاعبين جدد ينضمون إلى الخادم)
المحلول
أسهل الحل سيكون استخدام final
متغير مؤقت:
final int currentNumOfPlayers = numOfPlayers;
EventQueue.invokeLater(new Runnable() {
public void run() {
numPlayers.setText("There are currently " +
currentNumOfPlayers + " players in this game");
}
});
نصائح أخرى
عليك أن تجعلها نهائية أو لديك Runnable
مرجع حقل (فئة متنوعة). إذا تم الرجوع إلى حقل تأكد من أنه مؤكدة مؤشر ترابط (عبر مزامنة أو متقلبة).
وماذا عن هذا:
while ((message = this.in.readLine()).startsWith("NUMPLAYERS")) {
numOfPlayers = Integer.parseInt(message.split(":")[1]);
final newText = "There are currently " + numOfPlayers + " players in this game";
EventQueue.invokeLater(new Runnable() {
public void run() {
numPlayers.setText(newText);
}
});
}
ملاحظة: أفترض أن البروتوكول الاختياري لديه سبب وجيه لعدم وضع علامة numOfPlayers
كما نهائي، ربما يتم تغييره لاحقا في نفسه while
حلقة في التعليمات البرمجية ليست ذات صلة بالسؤال، لذلك لا يظهر. وبالتالي ذلك numOfPlayers
أعلن قبل while
حلقه.
بدون هذا الافتراض، لن أقدم المتغير الإضافي newText
.
حدد هذا الفصل خارج طريقتك:
public abstract class MyRunnable implements Runnable {
protected int var;
public MyRunnable (int var) {
this.var = var;
}
}
Now your code can look like this:
SwingUtilities.invokeAndWait(new MyRunnable(5) {
@Override
public void run() {
//numPlayers.setText("There are currently " + var + " players in this game");
}
});
(لأغراض هذا المثال، أفترض أن هناك سبب وجيه لماذا استخدام متغير درجة الحرارة النهائية المحلي لن يعمل. أنا بصراحة لا أستطيع التفكير في أي سبب لهذا التقييد، على الرغم من ذلك.)