需要帮助在javafx应用程序中延迟吗

需要帮助在javafx应用程序中延迟吗,java,javafx,concurrency,delay,timeunit,Java,Javafx,Concurrency,Delay,Timeunit,我正在制作一个javafx应用程序来模拟机器人真空 我希望它是自动化的,这样它就可以自己抽真空了 我需要插入一个延迟,这样人类可以看到真空在穿越环境时所采取的步骤 到目前为止,我测试过的所有延迟方法如果在while循环中都会导致程序崩溃 如果我把它放在while之外,只需单击一个按钮进入下一步,一切正常 如果我将延迟设置为非常短的时间,比如1毫秒,它也可以正常工作 了解发生这种情况的原因吗?任何执行一组指令一段时间(忙)且无法响应用户输入或系统事件的应用程序都会被Windows视为“无响应”,当

我正在制作一个javafx应用程序来模拟机器人真空

我希望它是自动化的,这样它就可以自己抽真空了

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

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

如果我把它放在while之外,只需单击一个按钮进入下一步,一切正常

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


了解发生这种情况的原因吗?

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

你看,问题是你试图用while循环来延迟接口更新,这使得你的程序在一段时间内执行某些东西,而当你忙于执行循环时,它无法响应系统或用户事件

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

请回答以下问题,至少以UI线程的形式包含引用的while循环的代码。“长时间运行”操作(如延迟)需要在UI线程之外完成。有关如何进行此类操作的更多信息,请参阅。