在先前的詢問中,您提到遇到了無法在 SwingWorker 執行緒中處理的異常。本文深入探討了產生源自 RepaintManager 類別的異常的具體問題。
1.使用 CheckThreadViolationRepaintManager:
產生此類異常的經過驗證的方法是使用 CheckThThViolationRepa Manager 類別。此自訂類別擴展了 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中文網其他相關文章!