私は、ユーザの操作でメッセージをスプラッシュするためのタイマーを起動するアプリケーションを持っています。 JDKのプロファイラでは、他のすべてのスレッドはGC(私が推測する)の実行後に削除されているようだが、作成されたタイマーは削除されていない。何が起こっているのでしょうか?Java - 実行後にタイマが削除されない
私のタイマー:
/**
* @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);
}
それは私が静的メソッドを使用していますか、私はそれを自分自身を破壊する必要があるためですか?
私はそれについてはわかりませんが、とにかく知っておいて、私はjavaFXのタイムラインを使用しました(少なくとも私のために)より良いです –