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