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 중국어 웹사이트의 기타 관련 기사를 참조하세요!