Ich habe eine Anwendung, die einen Timer startet, um eine Nachricht auf Benutzeraktionen zu übertragen. Im JDK-Profiler scheint es, dass alle anderen Threads nach der Ausführung durch GC entfernt werden (ich denke mal), aber die erstellten Timer werden nicht entfernt. Was könnte dort passieren?Java - Timer wird nicht nach der Ausführung entfernt
meine Timer:
/**
* @param owner
* @param added
*/
public static void splashParentWithAnimation(AnchorPane owner, Parent added,double posX,double posY) {
// addParentWithAnimation(owner, added);
owner.getChildren().add(added);
AnchorPane.setLeftAnchor(added, posX);
AnchorPane.setTopAnchor(added, posY);
FadeTransition ft1 = new FadeTransition(Duration.millis(300), added);
ft1.setFromValue(0.0);
ft1.setToValue(1.0);
ft1.play();
Timer messagePrinter = new Timer();
messagePrinter.schedule(new TimerTask() {
@Override
public void run() {
Platform.runLater(() -> {
if (!owner.getChildren().contains(added))
return;
FadeTransition ft1 = new FadeTransition(Duration.millis(300), added);
ft1.setFromValue(1.0);
ft1.setToValue(0.0);
ft1.play();
ft1.setOnFinished((e) -> {
if (owner.getChildren().contains(added))
owner.getChildren().remove(added);
});
});
}
}, 1000);
}
Ist es, weil ich eine statische Methode verwenden oder soll ich es selbst zerstören?
ich bin mir nicht sicher, aber gut zu wissen, wie auch immer, ich habe javaFX's Timeline stattdessen verwendet, die (zumindest für mich) ist besser –