1

这是一个片段

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

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

我不确定为什么会发生这种情况,因为我按逻辑顺序排列。如果有人可以帮助我,那就太好了。

编辑:

有谁知道替代方案,所以我可以使用“延迟”效果?

4

3 回答 3

6

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

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

另一方面,如果您的事件线程受到长时间运行的任务的影响,则使用 SwingWorker(如 Guillaume 1+ 向他建议的那样)在后台执行任务。

于 2012-05-21T17:38:15.727 回答
3

您正在调用sleepEDT(事件调度线程)。您应该避免这种情况,因为它确实会冻结 UI。

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

于 2012-05-21T17:38:45.227 回答
0

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

结果,当 EDT 退出sleep阶段时,它将所有此类重绘请求(如果启用了默认属性的合并)合并为一个执行的重绘。如果未启用合并,则所有排队的请求都将连续执行,中间没有任何时间间隔。结果似乎UI没有更新。

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

于 2013-01-22T15:23:07.823 回答