我正在制作一个模拟机器人吸尘器的 javafx 应用程序。
我希望它是自动化的,所以它会自行清理环境。
我需要插入一个延迟,以便人们可以看到真空在穿越环境时所采取的步骤。
到目前为止,如果我测试过的所有延迟方法都在 while 循环中,它们都会使我的程序崩溃。
如果我把它放在外面,然后点击下一步的按钮,一切正常。
如果我将延迟设置为非常短的时间,例如 1 毫秒,它也可以正常工作。
关于为什么会发生这种情况的任何想法?
我正在制作一个模拟机器人吸尘器的 javafx 应用程序。
我希望它是自动化的,所以它会自行清理环境。
我需要插入一个延迟,以便人们可以看到真空在穿越环境时所采取的步骤。
到目前为止,如果我测试过的所有延迟方法都在 while 循环中,它们都会使我的程序崩溃。
如果我把它放在外面,然后点击下一步的按钮,一切正常。
如果我将延迟设置为非常短的时间,例如 1 毫秒,它也可以正常工作。
关于为什么会发生这种情况的任何想法?
执行一组指令一段时间(正忙)并且无法响应用户输入或系统事件的任何应用程序都被 Windows“视为”“无响应”,当您尝试与“无响应”程序交互时,Windows会告诉你它崩溃了。
您会看到,问题在于您尝试使用 while 循环延迟界面更新,这会使您的程序执行一段时间,而在忙于执行循环时,它无法响应系统或用户事件。
如果要进行延迟更新,请使用多线程。您的 while 循环阻塞了主线程,该线程也负责渲染和接受任何输入,因此您不能阻塞该线程。创建另一个线程并共享状态(例如,使用观察者模式)。然后你可以在这个辅助线程中执行 TimeUnit 的 sleep(),它不会让你的应用程序“崩溃”。