A Swing JLabel interpretiert jeden Text automatisch als HTML-Inhalt, wenn er mit & lt; html & gt; beginnt. Wenn der Inhalt dieses HTML ein Bild mit ungültiger URL ist, wird die gesamte GUI hängen bleiben, da die ImageFetche, die dieses Image laden soll, von einer NPE beendet wird.
Um dieses Problem zu reproduzieren, erstellen Sie einfach ein JLabel wie folgt
%Vor%Ich weiß, dass es eine Clienteigenschaft gibt, die verhindert, dass JLabel HTML interpretiert. Aber JLabel ist die Standard-Renderer-Implementierung für viele Swing-Komponenten (wie JTree, JTable usw.), was dies zu einem Problem für fast jede Swing-Anwendung macht, die Benutzereingaben erlaubt. Anstatt also Tonnen von benutzerdefinierten Renderern zu implementieren, suche ich nach einer globalen Lösung, um die HTML-Interpretation zu deaktivieren.
Es gibt einen Weg, wenn Sie Ihr eigenes Aussehen und Gefühl schaffen.
Ich bin mir nicht sicher, wie gut das funktioniert, aber es funktioniert. Nehmen wir an, Sie erweitern das "Classic Windows" L & amp; F. Sie brauchen mindestens 2 Klassen
Eines ist das Look & amp; Feel selbst, nennen wir es WindowsClassicLookAndFeelExt. Sie müssen nur die Methode initClassDefaults überschreiben.
Sie benötigen außerdem eine WindowsLabelExtUI-Klasse, um alle JLabels zu verwalten und die Eigenschaft festzulegen:
%Vor%Und schließlich eine Testklasse, wenn Sie das Thema als WindowsClassicLookAndFeelExt
festlegen %Vor%Und Sie werden etwas wie
sehen
Für ein einfaches JLabel können Sie die JComponent-Methode
aufrufen %Vor%auf dem Etikett, wo Sie HTML-Rendering deaktivieren möchten.
Referenz: Das HTML-Rendering in einem JLabel kann nicht deaktiviert werden
Für eine JTable, JTree oder JList müssen Sie einen benutzerdefinierten CellRenderer erstellen, der diese Eigenschaft definiert. Hier ist ein Beispiel (modifiziert von diesem Beispiel ), das einen benutzerdefinierten CellRenderer für JList .
%Vor%Ich habe den Beispielcode aus der ListCellRenderer -Dokumentation verwendet als Ausgangspunkt für den benutzerdefinierten Listen-CellRenderer.
Wenn ich das Beispiel ausführe, können Sie sehen, dass der HTML-Code im ersten Listeneintrag gerendert und nicht interpretiert wird.
Hängen ist wahrscheinlich das kleinste unangenehme Verhalten. Aus diesem Grund ist Datenvalidierung sehr wichtig. Lassen Sie die Benutzer einfach nicht so etwas eingeben.