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

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

您可以在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(); } 

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

例如

 class BackgroundTask extends SwingWorker { @Override public String doInBackground() { return someTimeConsumingMethod(); } @Override protected void done() { System.out.println("Done"); } } 

然后你把它叫到哪里:

 (new BackgroundTask()).execute();