اجعل الخيط يعمل على خيط غير EDT (مؤشر ترابط الأحداث) من EDT

StackOverflow https://stackoverflow.com/questions/2436113

سؤال

لدي طريقة تعمل على 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top