4

我有一个在 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);
}
4

2 回答 2

8

您可以使用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();
于 2010-03-12T22:00:23.767 回答
3

您可以创建并启动一个新的 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();
    }
于 2010-03-12T21:50:04.143 回答