我想在活动结束后暂停一下。但是当我使用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(...”
答案 0 :(得分:1)
通过在事件处理程序中调用Thread.sleep(..)
,您实际上会暂停核心UI线程。这就是为什么不仅mobTurn()
被延迟,而且你的完整用户界面也是如此。这包括您的界面的失效和绘图,以及其他事件的处理。您会将您的申请视为“冻结”。或者没有回应'在那个时候。
相反,您应该启动另一个线程,该线程会在时间到来时等待并执行您想要的操作。您可以使用Platform.runLater(..)
。有关示例,请参阅{{3}}。