Java Swing 애플리케이션에서 Thread.sleep()을 활용하면 전체 오류와 같은 예상치 못한 동작이 발생할 수 있습니다. 사용자 인터페이스(UI)가 정지되거나 응답하지 않습니다. 이는 Thread.sleep()이 Swing 구성 요소를 렌더링하는 스레드인 EDT(Event Dispatch Thread)의 실행을 일시 중지하기 때문에 발생합니다. 결과적으로 EDT는 이벤트 처리 및 UI 업데이트에 실패하여 UI가 정지된 것처럼 보입니다.
제공된 코드 조각에서는 Thread.sleep(1000*5)을 사용하여 루프가 생성되어 검사를 실행합니다. 매시간. 불행하게도 Thread.sleep() 호출은 Swing 구성 요소를 포함하여 EDT를 절전 모드로 전환합니다. 이렇게 하면 UI가 사용자 입력을 업데이트하거나 응답하지 못하게 됩니다.
이 문제를 해결하려면 대신 javax.swing.Timer를 사용할 수 있습니다. 타이머를 사용하면 EDT와 관계없이 주기적으로 실행되는 작업을 예약할 수 있습니다. 이를 통해 UI 응답성에 영향을 주지 않고 일반적인 작업 실행이 가능합니다.
다음은 타이머를 사용하는 코드의 업데이트된 버전입니다.
Timer t = new Timer(1000 * 5, new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Execute the check
// Update the UI with the check results
}
});
t.start(); // Start the timer
타이머는 EDT를 차단하지 않고 5초마다 예약된 작업(검사)을 실행합니다. 검사가 수행되는 동안 UI는 응답 상태를 유지하며 사용자가 사용할 수 있습니다. 그러면 검사 결과가 ActionListener 내의 UI에 표시될 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3