前回のお問い合わせで、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 中国語 Web サイトの他の関連記事を参照してください。