>  기사  >  Java  >  Thread.sleep()이 스윙 UI를 정지시키는 이유는 무엇입니까?

Thread.sleep()이 스윙 UI를 정지시키는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 14:44:03298검색

Why Does Thread.sleep() Freeze My Swing UI?

Java의 Thread.sleep()이 Swing UI에 미치는 영향

Java에서는 Swing 기반 애플리케이션에서 Thread.sleep()을 활용합니다. 전체 사용자 인터페이스를 일시 중지하여 응답하지 않게 만드는 의도하지 않은 결과가 발생할 수 있습니다.

문제 설명:

다음 코드 조각을 고려하세요.

<code class="java">// Code to create a simple Swing-based application
if (option == JFileChooser.APPROVE_OPTION) {
    selectedDirectory = chooser.getSelectedFiles();
    try {
        while (true) {
            runCheck(selectedDirectory);
            Thread.sleep(1000 * 5);//1000 is 1 second
        }
    } catch (InterruptedException e1) {
        Thread.currentThread().interrupt();
        e1.printStackTrace();
    }   
} </code>

이 애플리케이션은 Thread.sleep()을 사용하여 검사를 수행하기 전에 5초 동안 일시 중지합니다. 그러나 이 절전 기간 동안 사용자 인터페이스는 응답하지 않고 회색으로 표시됩니다.

UI 비활성 이유:

Thread.sleep()은 이를 호출하는 스레드를 일시 중지합니다. , 이 경우 EDT(이벤트 디스패치 스레드)입니다. EDT는 모든 GUI 이벤트를 처리하고 사용자 인터페이스를 렌더링하는 일을 담당합니다. 따라서 EDT가 절전 모드로 전환되면 UI는 입력에 대한 응답을 중단하고 디스플레이를 업데이트합니다.

대체 접근 방식:

UI 정지를 방지하려면 더 이상 적절한 해결책은 javax.swing.Timer를 사용하는 것입니다. 타이머는 지정된 간격으로 EDT에서 실행되도록 작업을 예약할 수 있습니다.

<code class="java">Timer t = new Timer(1000 * 5, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do your recurring task
    }
});</code>

이 경우 확인 수행 작업은 EDT에서 5초마다 실행되도록 예약되어 UI가 유지되도록 합니다. 검사가 진행되는 동안 반응합니다.

위 내용은 Thread.sleep()이 스윙 UI를 정지시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.