[英]Thread.Sleep() is freezing
这是一个片段
kit.insertHTML(doc, doc.getLength(), "Hello", 0, 0, null);
try{
Thread.sleep(1000);
}catch(Exception e){}
我使用HTMLEditorKit()
和HTMLDocument()
作为文本框。 文本框应显示“Hello”然后等待一秒钟,但是,当我尝试此操作时,它会等待一秒钟然后输入“Hello”一词,这不是我想要的。
我不确定为什么会这样,因为我按逻辑顺序排列了它。 如果有人可以帮助我解决这个问题,那就太好了。
编辑:
有谁知道替代方案,所以我可以使用“延迟”效果?
永远不要从Swing事件线程中调用Thread.sleep(...),因为这会使事件线程本身进入睡眠状态。 由于此线程负责所有Swing绘画和用户交互,因此这会使您的应用程序进入睡眠状态。
如果您只想延迟显示时间,请考虑使用Swing Timer 。
另一方面,如果您的事件线程被长时间运行的任务所破坏,则使用SwingWorker在后台执行任务(如Guillaume 1+向他建议的那样)。
您正在EDT(事件调度线程)上调用sleep
。 您应该避免这种情况,因为确实如此,它会冻结UI。
为了避免这种情况,请改用SwingWorker或按照HFOE的建议使用Swing计时器
Thread.sleep
是一项长期运行的任务。 当您在EDT中运行这样的任务时,它将阻止所有重新绘制请求的执行。 在睡眠阶段发送的所有未处理的重涂请求都排队等待以后的处理。
结果,当EDT退出sleep
阶段时,它将所有此类重绘请求(如果启用了合并,这是默认属性)合并为一个重绘,然后执行该重绘请求。 如果未启用合并,那么将按顺序执行所有排队的请求,而两者之间没有任何时间间隔。 结果,UI似乎没有更新。
要纠正这种情况,请使用在特定时间间隔后定期触发的SwingTimer
或SwingWorker
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.