ActionEvent中的JavaFX Thread.Sleep()或pause()

ActionEvent中的JavaFX Thread.Sleep()或pause(),java,javafx,wait,sleep,pause,Java,Javafx,Wait,Sleep,Pause,我是JavaFX新手,每次按下按钮时,我都会尝试,首先,它会在标签上显示一些信息,然后,改变场景。 事实上,一切都很好,但我就是找不到在改变场景之前如何等待特定的时间 我试着使用Thread.sleep()如下:(它正确地等待,但不知何故它不会更改标签的文本) (编辑,感谢您为pause()的actionEvent问题提供的解决方案) 我还尝试了JavaFX的暂停方法,但它没有等待,仍然会立即跳转到另一个场景 @FXML public void pressButton(ActionEve

我是JavaFX新手,每次按下按钮时,我都会尝试,首先,它会在标签上显示一些信息,然后,改变场景。 事实上,一切都很好,但我就是找不到在改变场景之前如何等待特定的时间

我试着使用Thread.sleep()如下:(它正确地等待,但不知何故它不会更改标签的文本)

(编辑,感谢您为pause()的actionEvent问题提供的解决方案)

我还尝试了JavaFX的暂停方法,但它没有等待,仍然会立即跳转到另一个场景

    @FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    PauseTransition pause = new PauseTransition(Duration.seconds(3));
    pause.setOnFinished(e ->{
        lLeftBottom.setText(user.getUserInfo());
    });
    pause.play();
    changeScene2(event);
}

我怎样才能延迟呢?

关于您的第一个问题:尝试使用Try-catch。为我锻炼

public static void main(String[] args) {
    System.out.println("test1");
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("test2");
}

您已经使用了向后暂停转换。如果要在暂停后更改场景,则需要在onFinished事件处理程序中包含该部分:

@FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    PauseTransition pause = new PauseTransition(Duration.seconds(3));
    pause.setOnFinished(e ->{
        changeScene2(event);
    });
    lLeftBottom.setText(user.getUserInfo());
    pause.play();
}

是的,谢谢你解决了这个错误。但是当我按下按钮时,它并没有等待,它仍然会立即跳转到另一个场景。
onFinished
处理程序中的代码会在暂停后执行(暂停完成时),因此您可以将此向后。非常感谢,我明白暂停现在是如何工作的,这解决了我的问题!谢谢,它正在等待是的,但不知何故它没有设置标签的文本。当我在sleep()上使用throw exception时,它会正确地等待,但不会更改标签的文本。您不应该在JavaFX应用程序线程上调用
Thread#sleep(…)
。那条线必须随时有反应(@egeblut)@Slaw哦,我明白了,谢谢。从现在起我将使用
PauseTransition
,噢,我现在就知道了。非常感谢你解决了我的问题!
@FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException {
    user = new User(inUsername.getText(),inPassword.getText());
    PauseTransition pause = new PauseTransition(Duration.seconds(3));
    pause.setOnFinished(e ->{
        changeScene2(event);
    });
    lLeftBottom.setText(user.getUserInfo());
    pause.play();
}