修复 TaskListPane.StatusChangeListener 持有 ListCell 的强引用的问题 (#4347)
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user