按下按钮时javafx循环

按下按钮时javafx循环,java,javafx,Java,Javafx,我有麻烦让这个循环时,按钮被按下,并停止循环时,按钮被释放 btnUp.pressedProperty().addListener((observable, wasPressed, pressed) -> { System.out.println("changed"); if (pressed) { System.out.println("pressed"); while(btnUp.isArmed()){ try

我有麻烦让这个循环时,按钮被按下,并停止循环时,按钮被释放

btnUp.pressedProperty().addListener((observable, wasPressed, pressed) -> {
    System.out.println("changed");
    if (pressed) {
        System.out.println("pressed");
        while(btnUp.isArmed()){ 
            try        
            {
                Thread.sleep(1000);
            } 
            catch(InterruptedException ex) 
            {
                Thread.currentThread().interrupt();
            }
            //moveflag = false;
            System.out.println("pressed");
        }
    } else {
        System.out.println("released");
    }
});
  • 不要在UI操作中使用Thread.sleep(),它会阻止所有UI绘图
  • 在changelistener中不要使用,只需要有一个单独的循环来检查按钮的状态
  • 对于这样的循环,时间线是最好的

    public void start(Stage stage) {
     Button btn = new Button("Press me");
    
     Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), (ActionEvent event) -> {
        // this code will be called every second
        System.out.println(btn.isPressed() ? "pressed" : "released");
     }));
     timeline.setCycleCount(Timeline.INDEFINITE);
     timeline.play();
    
    
     StackPane root = new StackPane();
     root.getChildren().add(btn);
    
     Scene scene = new Scene(new StackPane(btn), 300, 250);
     stage.setTitle("Hello World!");
     stage.setScene(scene);
     stage.show();
    
    }

  • 不要在UI操作中使用Thread.sleep(),它会阻止所有UI绘图
  • 在changelistener中不要使用,只需要有一个单独的循环来检查按钮的状态
  • 对于这样的循环,时间线是最好的

    public void start(Stage stage) {
     Button btn = new Button("Press me");
    
     Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), (ActionEvent event) -> {
        // this code will be called every second
        System.out.println(btn.isPressed() ? "pressed" : "released");
     }));
     timeline.setCycleCount(Timeline.INDEFINITE);
     timeline.play();
    
    
     StackPane root = new StackPane();
     root.getChildren().add(btn);
    
     Scene scene = new Scene(new StackPane(btn), 300, 250);
     stage.setTitle("Hello World!");
     stage.setScene(scene);
     stage.show();
    
    }


  • @Folieadeux:您可以通过单击左侧的来接受答案。@Folieadeux:您可以通过单击左侧的来接受答案。