2011-12-12 4 views
3

저는이 초보자 용 질문에 대해 매우 익숙했습니다.JButton에 대한 작업 후 동결을 피하십시오

나는 JButton을 가지고 있는데, 클릭 할 때 약간의 MySQL 쿼리가 트리거되고 2 ~ 3 초가 걸린다. 이 시간 동안 내 사용자 인터페이스가 완전히 정지되었습니다. 그걸 피할 ​​수있는 방법이 있습니까? 어쩌면 내가 동기화, 스레드 또는 runnable 같은 것을 사용해야하지만 난 아주 잘 이해가 안 돼요. 누군가 제발 설명해 주실 수 있습니까?

대단히 감사합니다.

감사합니다.

빈센트

답변

2

사용자 인터페이스와 동일한 스레드에서 쿼리를 실행하기 때문에, 그 스레드가, 따라서 "정지"그동안 사용자의 명령을 수신 할 수 없습니다.

해결책은 새로운 스레드를 시작하고 병렬로 쿼리를 실행 한 다음과 같은 것을 사용하여 UI를 업데이트하는 것입니다. 같은 뭔가 : UI 스레드에 대기중인 모든 이벤트가 처리 될 때까지

// button action listener code 

Thread t = new Thread(new Runnable() { 
    public void run() { 

     // execute query here 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 

       // update the ui here 

      } 
     }); 
    } 
}); 
t.start(); 

SwingUtilities.invokeLater 효과적으로 업데이트 작업을 큐에. javadoc here을 읽으십시오.