使线程在EDT的非EDT(事件调度线程)线程上运行

时间:2010-03-12 21:46:47

标签: java swing awt event-dispatch-thread

我有一个在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 个答案:

答案 0 :(得分:7)

您可以使用SwingWorker在EDT上的工作线程上执行任务。

E.g。

class BackgroundTask extends SwingWorker<String, Object> {
    @Override
    public String doInBackground() {
        return someTimeConsumingMethod();
    }

    @Override
    protected void done() {
        System.out.println("Done");
    }
}

然后你在哪里打电话:

(new BackgroundTask()).execute();

答案 1 :(得分:3)

您可以在EDT线程中创建并启动一个执行方法的新Java线程:

@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();
    }