-1

我正在制作一个模拟机器人吸尘器的 javafx 应用程序。

我希望它是自动化的,所以它会自行清理环境。

我需要插入一个延迟,以便人们可以看到真空在穿越环境时所采取的步骤。

到目前为止,如果我测试过的所有延迟方法都在 while 循环中,它们都会使我的程序崩溃。

如果我把它放在外面,然后点击下一步的按钮,一切正常。

如果我将延迟设置为非常短的时间,例如 1 毫秒,它也可以正常工作。

关于为什么会发生这种情况的任何想法?

4

1 回答 1

0

执行一组指令一段时间(正忙)并且无法响应用户输入或系统事件的任何应用程序都被 Windows“视为”“无响应”,当您尝试与“无响应”程序交互时,Windows会告诉你它崩溃了。

您会看到,问题在于您尝试使用 while 循环延迟界面更新,这会使您的程序执行一段时间,而在忙于执行循环时,它无法响应系统或用户事件。

如果要进行延迟更新,请使用多线程。您的 while 循环阻塞了主线程,该线程也负责渲染和接受任何输入,因此您不能阻塞该线程。创建另一个线程并共享状态(例如,使用观察者模式)。然后你可以在这个辅助线程中执行 TimeUnit 的 sleep(),它不会让你的应用程序“崩溃”。

于 2019-09-23T05:35:22.053 回答