2010-03-12 64 views
4

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

回答

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

我希望它的EDT之外执行,在一个新的线程 – Aly 2010-03-12 21:50:49

+0

看我的例子,该工作将不会在美国东部时间执行。 – 2010-03-12 21:53:52

+1

谢谢我打电话给t.run()取而代之的是 – Aly 2010-03-12 21:57:46

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(); 
相关问题