اجعل الخيط يعمل على خيط غير EDT (مؤشر ترابط الأحداث) من EDT
-
19-09-2019 - |
سؤال
لدي طريقة تعمل على EDT وداخلها أريد أن أجعلها تنفذ شيئا ما في مؤشر ترابط جديد (غير EDT). يعتمد الرمز الحالي الخاص بي:
@Override
public void actionPerformed(ActionEvent arg0) {
//gathering parameters from GUI
//below code I want to run in new Thread and then kill this thread/(close the JFrame)
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}
المحلول
يمكنك إنشاء وبدء تشغيل مؤشر ترابط Java الجديد الذي ينفذ الأسلوب الخاص بك من داخل مؤشر ترابط EDT:
@Override
public void actionPerformed(ActionEvent arg0) {
Thread t = new Thread("my non EDT thread") {
public void run() {
//my work
new GameInitializer(userName, player, Constants.BLIND_STRUCTURE_FILES.get(blindStructure), handState);
}
};
t.start();
}
نصائح أخرى
يمكنك استخدام SwingWorker
للقيام بمهمة على موضوع العمال قبالة EDT.
على سبيل المثال
class BackgroundTask extends SwingWorker<String, Object> {
@Override
public String doInBackground() {
return someTimeConsumingMethod();
}
@Override
protected void done() {
System.out.println("Done");
}
}
ثم أينما تسميها:
(new BackgroundTask()).execute();
لا تنتمي إلى StackOverflow