이전 문의에서 SwingWorker 스레드 내에서 처리할 수 없는 예외가 발생한다고 언급하셨습니다. 이 문서에서는 RepaintManager 클래스에서 발생하는 예외 생성과 관련된 구체적인 문제를 자세히 설명합니다.
1. CheckThreadViolationRepaintManager 사용:
이러한 예외를 생성하는 검증된 접근 방식은 CheckThreadViolationRepaintManager 클래스를 사용하는 것입니다. 이 사용자 정의 클래스는 RepaintManager를 확장하고 다시 그리기 또는 더티 영역 추가 작업을 가로챕니다. 이러한 작업이 이벤트 전달 스레드 외부에서 발생하면 예외가 발생하고 스택 추적이 인쇄됩니다.
public class CheckThreadViolationRepaintManager extends RepaintManager { // Override methods to check for thread violations and print stack trace if found }
2. RepaintManager 설정:
CheckThreadViolationRepaintManager 인스턴스를 생성한 후에는 이를 현재 다시 그리기 관리자로 설정해야 합니다:
RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
3. 위반 트리거:
예외를 트리거하려면 이벤트 전달 스레드가 아닌 스레드에서 다시 그리기 또는 더티 영역 추가 작업을 수행합니다. 예외가 발생하고 콘솔에 인쇄됩니다.
예:
public static void main(String[] args) { RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager()); // Create a frame and repaint it from a separate thread JFrame frame = new JFrame(); SwingUtilities.invokeLater(() -> frame.repaint()); }
이 코드는 CheckThreadViolationRepaintManager가 백그라운드 스레드에서 다시 그리기 작업을 감지하고 예외를 인쇄합니다.
위 내용은 Swing의 RepaintManager에서 예외를 어떻게 트리거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!