사용자 작업에 대한 메시지를 표시하는 타이머를 시작하는 응용 프로그램이 있습니다. 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의 타임 라인을 사용했다. –