Heim > Java > javaLernprogramm > Wie kann ich RepaintManager-Ausnahmen von SwingWorker-Threads generieren und abfangen?

Wie kann ich RepaintManager-Ausnahmen von SwingWorker-Threads generieren und abfangen?

DDD
Freigeben: 2024-12-15 16:36:12
Original
386 Leute haben es durchsucht

How Can I Generate and Catch RepaintManager Exceptions from SwingWorker Threads?

Generierung von RepaintManager-Ausnahmen in SwingWorker-Threads

Bei der Arbeit an einem verwandten Problem wurde festgestellt, dass bestimmte Ausnahmen in RepaintManager schwierig zu beheben sein können Erfassung und Ausgabe von SwingWorker-Threads. Dieser Artikel befasst sich mit dem Thema der Generierung von RepaintManager-Ausnahmen und bietet eine Lösung.

Ansatz: Verwendung von CheckThreadViolationRepaintManager

Die CheckThreadViolationRepaintManager-Klasse ermöglicht die Erkennung von Thread-Verstößen innerhalb von Swing -basierte Anwendungen. Indem es als aktueller Repaint-Manager festgelegt wird, kann es Komponentenungültigmachungen und Ergänzungen schmutziger Regionen überwachen, um sicherzustellen, dass sie im Event Dispatch Thread (EDT) ausgeführt werden. Wenn Verstöße auftreten, werden Ausnahmen ausgelöst.

Das bereitgestellte Beispiel demonstriert die Verwendung dieser Klasse, indem Ausnahmen für verschiedene Phasen der Initialisierung des Frame-UI-Delegaten ausgelöst werden. Dieser Ansatz hat sich beim Erkennen und Drucken mehrerer Arten von RepaintManager-Ausnahmen als effektiv erwiesen.

Syntax und Implementierung:

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);
            }
        }
    }
}
Nach dem Login kopieren

Fazit:

Durch die Nutzung der CheckThreadViolationRepaintManager-Klasse ist es möglich, Ausnahmen innerhalb von RepaintManager zu generieren. Bereitstellung wertvoller Einblicke in Thread-Verstöße innerhalb von Swing-Anwendungen. Dadurch können Entwickler potenzielle Probleme im Zusammenhang mit der EDT-Konformität erkennen und lösen und so eine reibungslosere und zuverlässigere Anwendungsausführung gewährleisten.

Das obige ist der detaillierte Inhalt vonWie kann ich RepaintManager-Ausnahmen von SwingWorker-Threads generieren und abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage