Заставить поток работать в потоке, не являющемся EDT (потоком отправки событий) из EDT - PullRequest
4 голосов
/ 13 марта 2010

У меня есть метод, работающий на 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);
}

Ответы [ 2 ]

7 голосов
/ 13 марта 2010

Вы можете использовать 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();
3 голосов
/ 13 марта 2010

Вы можете создать и запустить новый поток 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();
    }
...