2010-03-12 2 views
4

J'ai une méthode qui s'exécute sur l'EDT et dans ce que je veux faire exécuter quelque chose sur un nouveau thread (non EDT). Mon code actuel suit:Rendre le thread exécuté sur un thread non EDT (thread d'envoi d'événement) à partir d'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); 
} 

Répondre

3

Vous pouvez créer et lancer un nouveau thread Java qui exécute votre méthode à partir du fil 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(); 
    } 
+0

Je veux qu'il soit exécuté en dehors de l'EDT, sur un nouveau fil – Aly

+0

Regardez mon exemple, le travail ne serait pas exécuté sur l'EDT. –

+1

Merci j'ai appelé t.run() à la place qui l'a fait se casser – Aly

7

Vous pouvez utiliser SwingWorker pour entreprendre une tâche sur un travailleur enfiler l'EDT.

E.g.

class BackgroundTask extends SwingWorker<String, Object> { 
    @Override 
    public String doInBackground() { 
     return someTimeConsumingMethod(); 
    } 

    @Override 
    protected void done() { 
     System.out.println("Done"); 
    } 
} 

Alors où que vous appelez:

(new BackgroundTask()).execute(); 
Questions connexes