如何暂停Java.uti.Timer?

如何暂停Java.uti.Timer?,java,javafx,timer,scene,Java,Javafx,Timer,Scene,我正在开发一个JavaFX应用程序,其中我使用java.util.Timer跟踪用户鼠标移动 其概念是,如果鼠标在场景中几秒钟内不移动,则每当鼠标移动时,按钮将不可见。按钮将再次出现。当用户将光标放在按钮上时,计时器将停止。当退出时,按钮计时器将再次启动 这是启动计时器方法 public static void startTimer(){ timer = new Timer(); task = new TimerTask() { @Override

我正在开发一个JavaFX应用程序,其中我使用
java.util.Timer
跟踪用户鼠标移动

其概念是,如果鼠标在场景中几秒钟内不移动,则每当鼠标移动时,按钮将不可见。按钮将再次出现。当用户将光标放在按钮上时,计时器将停止。当退出时,按钮计时器将再次启动

这是启动计时器方法

    public static void startTimer(){

    timer = new Timer();
    task = new TimerTask() {

        @Override
        public void run() {

            if(detection>0){
                Util_Class.getUi_obj().getLeftbuttongroup().setVisible(false);
                Util_Class.getUi_obj().getRightbuttongroup().setVisible(false);
            }else{
                detection++;
            }

        }
    };

    timer.schedule(task, 2000, 2000);
    System.out.println("TIMER STARTED");
    //startTimer();
}
这是为了停止计时器

public static void stopTimer(){

    timer.cancel();
    System.out.println("TIMER STOPED");
}



public void leftbuttonmovehandler(MouseEvent event){


    if(event.getEventType()==MouseEvent.MOUSE_ENTERED){
        System.out.println("MOUSE ENTERED");
        Main.stopTimer();
    }else if(event.getEventType()==MouseEvent.MOUSE_EXITED){
        System.out.println("MOUSE EXITED");
        Main.start();
    }

}
现在,我的代码一开始在应用程序启动时运行良好,但当我重新加载应用程序时,回调函数会按预期触发,但按钮消失,尽管光标位于按钮上


如果有人帮助我,那就太好了

A
PauseTransition
可用于在指定时间后隐藏
按钮

每当触发
鼠标移动
事件时,在场景中从一开始播放
暂停转换
;如果其中一个
按钮触发了
鼠标移动
,则停止
暂停转换
,并通过使用该事件阻止事件到达
场景

private PauseTransition timer;

private void startTimer() {
    btn.setVisible(true);
    btn2.setVisible(true);
    timer.playFromStart();
}

private void stopTimer() {
    btn.setVisible(true);
    btn2.setVisible(true);
    timer.stop();
}

private Button btn, btn2;

@Override
public void start(Stage primaryStage) {
    timer = new PauseTransition(Duration.seconds(3));

    btn = new Button("Button 1");
    btn2 = new Button("Button 2");

    timer.setOnFinished(evt -> {
        btn.setVisible(false);
        btn2.setVisible(false);
    });

    EventHandler<MouseEvent> buttonMouseMoveHandler = evt -> {
        evt.consume();
        stopTimer();
    };

    btn.setOnMouseMoved(buttonMouseMoveHandler);
    btn2.setOnMouseMoved(buttonMouseMoveHandler);

    VBox box = new VBox(100, btn, btn2);

    StackPane root = new StackPane(new Group(box));

    Scene scene = new Scene(root, 500, 500);
    scene.setOnMouseMoved(evt -> {
        startTimer();
    });

    startTimer();

    primaryStage.setScene(scene);
    primaryStage.show();
}
专用暂停转换计时器;
私有void startTimer(){
btn.setVisible(真);
btn2.setVisible(真);
timer.playFromStart();
}
私有void stopTimer(){
btn.setVisible(真);
btn2.setVisible(真);
timer.stop();
}
专用按钮btn、btn2;
@凌驾
公共无效开始(阶段primaryStage){
计时器=新的暂停转换(持续时间。秒(3));
btn=新按钮(“按钮1”);
btn2=新按钮(“按钮2”);
timer.setOnFinished(evt->{
btn.setVisible(假);
btn2.setVisible(假);
});
EventHandler按钮MouseMoveHandler=evt->{
evt.consume();
停止计时器();
};
btn.setOnMouseMoved(按钮MouseMoveHandler);
btn2.setOnMouseMoved(按钮MouseMoveHandler);
VBox框=新的VBox(100,btn,btn2);
StackPane root=新的StackPane(新组(框));
场景=新场景(根,500500);
scene.setOnMouseMoved(evt->{
startTimer();
});
startTimer();
初级阶段。场景(场景);
primaryStage.show();
}

在JavaFX中,使用
PauseTransition有更简单的方法来实现这一点
;你想看那个解决方案吗?是的,当然不想看。我想看。我只是想找到它:看哪一个设置光标为
NONE
;但您也可以将按钮可见性设置为
false