ActionEvent 中的 JavaFX Thread.Sleep() 或 pause()
Posted
技术标签:
【中文标题】ActionEvent 中的 JavaFX Thread.Sleep() 或 pause()【英文标题】:JavaFX Thread.Sleep() or pause() in ActionEvent 【发布时间】:2021-04-02 22:10:46 【问题描述】:我是 JavaFX 的新手,每次按下按钮时我都在尝试,first,它会在标签上显示一些信息,然后 换个场景。 实际上一切都很好,但我只是找不到如何在更改场景之前等待特定的时间。
我尝试像这样使用 Thread.sleep() :(它等待正常,但不知何故它不会改变标签的文本)
@FXML
public void pressButton(ActionEvent event) throws IOException, InterruptedException
user = new User(inUsername.getText(),inPassword.getText());
lLeftBottom.setText(user.getUserInfo());
Thread.sleep(2000);
changeScene2(event);
(编辑,感谢Slaw关于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);
我怎样才能让这个延迟?
【问题讨论】:
是的,谢谢你解决了这个错误。但是我按下按钮它并没有等待,它仍然立即跳转另一个场景onFinished
处理程序中的代码在暂停后(当暂停结束时)执行,因此您可以向后执行。
非常感谢,我知道暂停现在是如何工作的,这解决了我的问题!
【参考方案1】:
关于您的第一个问题:尝试使用 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");
【讨论】:
谢谢,它正在等待,但不知何故它没有设置标签的文本。当我在 sleep() 上使用 throw 异常时,它会正确等待,但也不会更改标签的文本。 您永远不应该在 JavaFX 应用程序线程上调用Thread#sleep(...)
。该线程必须始终响应(@EgeBULUT)
@Slaw 哦,我明白了,谢谢。从现在开始我将使用PauseTransition
【参考方案2】:
您已经向后使用了 PauseTransition。如果你想在暂停后改变场景,那就是需要在你的 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();
【讨论】:
哦,我现在明白了。非常感谢您解决了我的问题!以上是关于ActionEvent 中的 JavaFX Thread.Sleep() 或 pause()的主要内容,如果未能解决你的问题,请参考以下文章