使thread.sleep()停止前面的代码

时间:2016-12-12 21:43:07

标签: java javafx

我想在活动结束后暂停一下。但是当我使用Thread.Sleep(1000)时,它也会停止上面的代码。例如:

attackButton.setOnAction(e -> {
        int playerAttack = player.getAtt();
        mob.setHP(playerAttack);
        mobHPLabel.setText(mob.getHP() + " HP");
        eventTextArea.appendText("You dealt " + playerAttack + " damage to the " + mob.getEntityClass() + "\n");
        Layout.setTextAreaFont(eventTextArea, "black", 15);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        mobTurn();
    });

这只是我代码的一小部分,但问题出在这里。 “Thread.sleep(1000)”不仅会延迟它应该执行的“mobTurn()”。它还会停止上面的代码,“event.TextArea.appendText(...”

1 个答案:

答案 0 :(得分:1)

通过在事件处理程序中调用Thread.sleep(..),您实际上会暂停核心UI线程。这就是为什么不仅mobTurn()被延迟,而且你的完整用户界面也是如此。这包括您的界面的失效和绘图,以及其他事件的处理。您会将您的申请视为“冻结”。或者没有回应'在那个时候。

相反,您应该启动另一个线程,该线程会在时间到来时等待并执行您想要的操作。您可以使用Platform.runLater(..)。有关示例,请参阅{{3}}。