3 Stimmen

Entdecken Sie den Swing-Komponentenvariablennamen zur Laufzeit

Ich bin mir nicht sicher, ob dies überhaupt möglich ist, aber ich habe eine Swing-Anwendung mit etwa vier Dutzend verschiedenen Labels, bei denen ich Fehler nachverfolgen muss, eine Anwendung, die ich nicht ursprünglich geschrieben habe, Variablen, die nicht statisch im Quellcode definiert sind, und ich habe Schwierigkeiten, genau festzustellen, welches Label dem Variablennamen im Quellcode entspricht.

Gibt es irgendwelche Arten von Plug-Ins oder Anwendungen, die Informationen über Swing GUI-Objekte während des Ausführens der Anwendung anzeigen können, einschließlich des Variablennamens, wenn vorhanden, auf den es sich bezieht?

1voto

sbridges Punkte 24664

Sie können den Variablennamen eines Objekts nicht direkt erhalten.

Wenn Sie Eclipse verwenden, können Sie einen bedingten Haltepunkt im JLabel-Konstruktor erstellen, der etwas Ähnliches macht wie

this.putClientProperty("Erstellungs-Stack-Trace", new Exception());

Dadurch können Sie den Stack-Trace (und die Erstellungszeilennummer) jedes erstellten JLabels sehen.

1voto

socha23 Punkte 9991

Wenn ich du wäre, würde ich es so machen:

  • Öffnen Sie src.zip aus dem Java JDK und extrahieren Sie JLabel.java. Platzieren Sie es in Ihrem Projekt.
  • Ändern Sie diese Klasse:
    • Fügen Sie ein Feld mit dem Typ Throwable hinzu, und schreiben Sie am Ende jedes Konstruktors ein new Throwable() hinein.
    • Fügen Sie am Ende jedes Konstruktors einen neuen Mausklick-Listener zum Komponenten hinzu. Der Handler muss nichts machen, damit Sie einen Breakpoint darin platzieren können.

Jetzt, wenn Sie Ihre App ausführen, hat Ihre modifizierte JLabel Vorrang vor der Standard-JDK-Version. Wenn Sie einen Punkt im Code finden möchten, an dem ein Label erstellt wurde, setzen Sie einen Breakpoint in den hinzugefügten Ereignishandler, klicken Sie auf dieses Label, und wenn der Debugger pausiert, untersuchen Sie den Stapel im hinzugefügten Throwable-Feld.

Vergessen Sie nicht, Ihre benutzerdefinierte JLabel nach Abschluss des Debuggings zu entfernen und sie nicht in der Produktionsumgebung zu verwenden, da die Erstellung von Throwable() in jedem JLabel negative Auswirkungen auf die Leistung haben wird.

1voto

Stephan Punkte 4306

Wenn Sie nur debuggen möchten und sehen wollen, welches Objekt zu welchem Komponenten in der GUI gehört, würde ich empfehlen, Swing Explorer für das Debuggen zu verwenden.

Sie können auch JLabel erweitern, Debugging-Funktionalität hinzufügen und alle JLabels im Code durch Ihr neues "Debugging"-Label ersetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X