假设以下代码为无限动画:
private void someMethod() {
TranslateTransition trans = new TranslateTransition();
trans.setNode(bgAnim);
trans.setDuration(new Duration(TimeUnit.SECONDS.toMillis(10)));
trans.setByX(100);
trans.setByY(-500);
trans.setOnFinished(event -> {
// some code to change direction
trans.play();
});
trans.play();
}
现在我正在更改屏幕,但是setOnFinished代码仍在另一个屏幕中执行(我使用this code来更改我的屏幕)。是不是因为它有一个setOnFinished-Listener而收集了garabe?调用trans.stop()是否允许gc收集它,或者可能是trans = null?
screenController的其他元素(如图像)似乎是垃圾回收。在VisualVM中,当我“垃圾邮件点击”更改屏幕按钮时,我可以看到内存被释放。