2010-03-12 4 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 스레드 내에서 방법을 실행하는 새로운 자바 스레드 작성하고 시작할 수 있습니다

@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

을 나는 내 예에서 새 스레드 – Aly

+0

봐에, 동부 서머 타임의 외부에서 실행하려는 작업은 EDT에서 실행되지 않습니다. –

+1

덕분에 t.run()을 호출하여 휴식을 취했습니다. – Aly

7

당신은 노동자에 대한 작업을 수행 할 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();