修复 TaskListPane.StatusChangeListener 持有 ListCell 的强引用的问题 (#4347)

This commit is contained in:
Glavo
2025-08-28 20:21:55 +08:00
committed by GitHub
parent d34dc82db6
commit 71d54955ad

View File

@@ -279,7 +279,7 @@ public final class TaskListPane extends StackPane {
private final JFXProgressBar bar = new JFXProgressBar(); private final JFXProgressBar bar = new JFXProgressBar();
private WeakReference<StageNode> prevStageNodeRef; private WeakReference<StageNode> prevStageNodeRef;
private ChangeListener<StageNode.Status> statusChangeListener; private StatusChangeListener statusChangeListener;
private Cell() { private Cell() {
setPadding(new Insets(0, 0, 4, 0)); setPadding(new Insets(0, 0, 4, 0));
@@ -364,32 +364,32 @@ public final class TaskListPane extends StackPane {
pane.setBottom(null); pane.setBottom(null);
} }
} }
}
private final class StatusChangeListener implements ChangeListener<StageNode.Status>, WeakListener { private static final class StatusChangeListener implements ChangeListener<StageNode.Status>, WeakListener {
private final WeakReference<Cell> cellRef; private final WeakReference<Cell> cellRef;
private StatusChangeListener(Cell cell) { private StatusChangeListener(Cell cell) {
this.cellRef = new WeakReference<>(cell); this.cellRef = new WeakReference<>(cell);
} }
@Override @Override
public boolean wasGarbageCollected() { public boolean wasGarbageCollected() {
return cellRef.get() == null; return cellRef.get() == null;
} }
@Override @Override
public void changed(ObservableValue<? extends StageNode.Status> observable, public void changed(ObservableValue<? extends StageNode.Status> observable,
StageNode.Status oldValue, StageNode.Status oldValue,
StageNode.Status newValue) { StageNode.Status newValue) {
Cell cell = cellRef.get(); Cell cell = cellRef.get();
if (cell == null) { if (cell == null) {
if (observable != null) if (observable != null)
observable.removeListener(this); observable.removeListener(this);
return; return;
}
cell.updateLeftIcon(newValue);
} }
cell.updateLeftIcon(newValue);
} }
} }