Génération d'exceptions RepaintManager dans les threads SwingWorker
En travaillant sur un problème connexe, il a été découvert que des exceptions spécifiques dans RepaintManager peuvent être difficiles à capture et sortie à partir des threads SwingWorker. Cet article abordera le sujet de la génération d'exceptions RepaintManager et fournira une solution.
Approche : Utilisation de CheckThreadViolationRepaintManager
La classe CheckThreadViolationRepaintManager permet la détection des violations de thread dans Swing -applications basées. En le définissant comme gestionnaire de repeinture actuel, il peut surveiller les invalidations de composants et les ajouts de régions modifiées pour garantir qu'ils sont effectués sur le fil de répartition d'événements (EDT). Lorsque des violations se produisent, des exceptions sont levées.
L'exemple fourni démontre l'utilisation de cette classe en lançant des exceptions pour différentes phases d'initialisation du délégué de l'interface utilisateur du cadre. Cette approche s'est avérée efficace pour détecter et imprimer plusieurs types d'exceptions RepaintManager.
Syntaxe et implémentation :
import javax.swing.RepaintManager; import javax.swing.SwingUtilities; public class RepaintManagerExceptions { public static void main(String[] args) { RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager()); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } private static class CheckThreadViolationRepaintManager extends RepaintManager { @Override public void addInvalidComponent(JComponent component) { checkThreadViolations(component); super.addInvalidComponent(component); } @Override public void addDirtyRegion(JComponent component, int x, int y, int w, int h) { checkThreadViolations(component); super.addDirtyRegion(component, x, y, w, h); } private void checkThreadViolations(JComponent component) { if (!SwingUtilities.isEventDispatchThread()) { violationFound(component, Thread.currentThread().getStackTrace()); } } protected void violationFound(JComponent component, StackTraceElement[] stackTrace) { System.out.println("EDT violation detected."); System.out.println(component); for (StackTraceElement st : stackTrace) { System.out.println("\tat " + st); } } } }
Conclusion :
En tirant parti de la classe CheckThreadViolationRepaintManager, il est possible de générer des exceptions dans RepaintManager, fournissant ainsi de précieux un aperçu des violations de threads dans les applications Swing. Cela permet aux développeurs d'identifier et de résoudre les problèmes potentiels liés à la conformité EDT, garantissant ainsi une exécution plus fluide et plus fiable des applications.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!