我有一个在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);
}发布于 2010-03-13 05:50:04
您可以创建并启动一个新的Java Thread,它从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-13 06:00:24
您可以使用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();https://stackoverflow.com/questions/2436113
复制相似问题