2012-03-08 2 views
0

다음 코드가 정확한지 궁금합니다. 나는 뭔가를하고, 잠을 자며, 뭔가를하고, GUI를 업데이트하는 SwingWorker를 가지고있다. SwingWorker에서 Thread.sleep을 사용해도 괜찮습니까?SwingWorker 내의 java - thread.sleep()

class MySwingy extends SwingWorker<Void, Void> { 

    @Override 
    public Void doInBackground() { 

     //Do Something 

     try { 
      Thread.sleep(200); 
     } catch (Exception ex) { 
     } 

     //Do Something 

    } 

    @Override 
    public void done() { 
     //Update GUI 
    } 
} 
+1

Thread.sleep 대신 [TimerTask] (http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html)를 사용하십시오. – helpermethod

+0

TimerTask를 사용해 보았지만 그 사이에 일시 중지되지 않았습니다. GUI가 너무 빨리 업데이트됩니다. – jadrijan

답변

2

정말로 필요한 경우 기술적 인 이유가 없습니다. 차단할 스레드는 백그라운드 스레드이고 UI는 차단되지 않습니다.

하지만 배경 스레드에서 잠자기해야하는 이유는 무엇입니까? 어쩌면 당신의 디자인은 그 필요를 제거하기 위해 향상 될 수 있습니까?

+0

정말 고마워요. 하드웨어 장치에 명령을 보내고 다시 응답하는 프로젝트에서 일하고 있습니다. 보내기와 답장 사이에는 약간의 시간 지연이 있습니다. – jadrijan

+1

Sawas는 일반적으로 그러한 하드웨어 장치 용 드라이버가 통화 차단 또는 콜백을 제공하기 때문에 묻습니다. 이러한 메커니즘을 사용하면 sleep() 호출이 필요하지 않습니다. –

+1

Martin이 옳습니다. 어떻게 답장합니까? 어떤 종류의 콜백을 받으나요? –