> Java > java지도 시간 > Swing의 RepaintManager에서 예외를 어떻게 트리거할 수 있습니까?

Swing의 RepaintManager에서 예외를 어떻게 트리거할 수 있습니까?

DDD
풀어 주다: 2024-12-23 13:59:15
원래의
640명이 탐색했습니다.

How Can I Trigger Exceptions from the RepaintManager in Swing?

RepaintManager에서 예외 트리거

소개

이전 문의에서 SwingWorker 스레드 내에서 처리할 수 없는 예외가 발생한다고 언급하셨습니다. 이 문서에서는 RepaintManager 클래스에서 발생하는 예외 생성과 관련된 구체적인 문제를 자세히 설명합니다.

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가 백그라운드 스레드에서 다시 그리기 작업을 감지하고 예외를 인쇄합니다.

추가 고려 사항

  • 완료 확인: 기본적으로 CheckThreadViolationRepaintManager는 모든 다시 그리기 작업을 확인합니다. 선택적으로 CompleteCheck 플래그를 false로 설정하여 보이는 구성 요소의 다시 그리기만 확인할 수 있습니다.
  • 특정 스레드 무시: 특정 스레드를 무시하도록 CheckThreadViolationRepaintManager의 ViolationFound 메서드를 재정의하여 위반 감지를 사용자 정의할 수 있습니다. , SwingWorker 스레드 등.

위 내용은 Swing의 RepaintManager에서 예외를 어떻게 트리거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿