Thread.Sleep()正在冻结

这是一个片段

kit.insertHTML(doc, doc.getLength(), "Hello", 0, 0, null); try{ Thread.sleep(1000); }catch(Exception e){} 

我使用HTMLEditorKit()HTMLDocument()作为文本框。 文本框应该显示“Hello”然后等待一秒然而,当我尝试这个时,它等待一秒然后把单词“Hello”这不是我想要的。

我不确定为什么会这样,因为我把它按逻辑顺序排列。 如果有人能帮我这个,那就太好了。

编辑:

有没有人知道另一种选择,所以我可以使用“延迟”的那种效果?

不要在Swing事件线程中调用Thread.sleep(…),因为这会使事件线程本身进入hibernate状态。 由于此线程负责所有Swing绘制和用户交互,这将使您的应用程序进入hibernate状态。

如果您只想延迟显示,请考虑使用Swing Timer 。

另一方面,如果您的事件线程被长时间运行的任务破坏,那么使用SwingWorker(如Guillaume 1+对他的建议)在后台执行任务。

你在EDT(事件调度线程)上调用sleep 。 你应该避免这种情况,因为它会冻结用户界面。

要避免这种情况,请使用SwingWorker,或者按照HFOE的建议使用SwingWorker ,使用Swing Timer

Thread.sleep是一个长期运行的任务。 当您在EDT中运行此类任务时,它会阻止执行所有重绘请求。 所有待处理的重绘请求和在睡眠阶段期间发送的所有重新绘制请求都排队等待将来处理。

因此,当EDT退出sleep阶段时,它会将所有这样的重绘请求(如果启用了合并,这是默认属性)合并为一个重新执行,这将被执行。 如果未启用合并,则所有排队的请求将按顺序执行,两者之间没有任何时间间隔。 结果似乎UI没有更新。

要纠正这种情况,请使用在特定时间间隔后定期触发的SwingTimerSwingWorker