【发布时间】:2016-12-12 21:43:06
【问题描述】:
我想在活动结束后暂停一下。但是当我使用 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(...”
【问题讨论】:
-
我想您实际上暂停了 UI 线程,该线程负责在您的操作处理程序完成之后 使附加文本可见。因此,您永远不应暂停此线程。您可以启动另一个等待 1000 秒并执行
mobTurn()然后的线程。 -
我建议遵循 Tomas Mikula 在 dup 问题中的回答。使用动画 API 可避免使用与后台线程关联的资源。
-
您可能希望在 mobTurn 完成之前禁用攻击按钮,否则玩家可以在暴徒有机会转弯之前将攻击按钮捣碎,这似乎不太公平:-)
-
用PauseTransition 代替
mobTurn()的睡眠呼叫也可以在这里工作。