mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-17 17:44:40 +02:00
8204963: javax.swing.border.TitledBorder has a memory leak
Reviewed-by: serb, kaddepalli
This commit is contained in:
parent
ff148ce175
commit
a70162e775
2 changed files with 119 additions and 12 deletions
|
@ -42,6 +42,8 @@ import javax.swing.JLabel;
|
|||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.basic.BasicHTML;
|
||||
|
||||
import jdk.internal.ref.CleanerFactory;
|
||||
|
||||
/**
|
||||
* A class which implements an arbitrary border
|
||||
* with the addition of a String title in a
|
||||
|
@ -759,22 +761,19 @@ public class TitledBorder extends AbstractBorder
|
|||
|
||||
private void installPropertyChangeListeners() {
|
||||
final WeakReference<TitledBorder> weakReference = new WeakReference<TitledBorder>(this);
|
||||
final PropertyChangeListener listener = new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (weakReference.get() == null) {
|
||||
UIManager.removePropertyChangeListener(this);
|
||||
UIManager.getDefaults().removePropertyChangeListener(this);
|
||||
} else {
|
||||
String prop = evt.getPropertyName();
|
||||
if ("lookAndFeel".equals(prop) || "LabelUI".equals(prop)) {
|
||||
label.updateUI();
|
||||
}
|
||||
}
|
||||
final PropertyChangeListener listener = evt -> {
|
||||
TitledBorder tb = weakReference.get();
|
||||
String prop = evt.getPropertyName();
|
||||
if (tb != null && ("lookAndFeel".equals(prop) || "LabelUI".equals(prop))) {
|
||||
tb.label.updateUI();
|
||||
}
|
||||
};
|
||||
|
||||
UIManager.addPropertyChangeListener(listener);
|
||||
UIManager.getDefaults().addPropertyChangeListener(listener);
|
||||
CleanerFactory.cleaner().register(this, () -> {
|
||||
UIManager.removePropertyChangeListener(listener);
|
||||
UIManager.getDefaults().removePropertyChangeListener(listener);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue