【问题标题】:java: why waiting some time is making my program not execute sequentially?java:为什么等待一段时间使我的程序不能按顺序执行?
【发布时间】:2013-06-22 19:14:53
【问题描述】:

我有一个逐步显示某个迭代过程的 GUI。 我想让它走一步,显示一步,等待1s,然后重复,...

代码:

while (! finished()) {
    advance(); // make and display one step
    try {
        Thread.sleep(1000);
    }
    catch (InterruptedException e) {       
    }
}

但是,在所有睡眠调用的整个添加时间过去之前,不会打印任何内容,然后一次打印所有步骤。 如何使执行流程按顺序进行?

注意:我尝试用一​​个很长的无用循环替换睡眠调用,并且行为是相同的。

【问题讨论】:

标签: java wait synchronize


【解决方案1】:

您必须在单独的线程中执行此任务。你正在冻结你的gui。您可以使用SwingWorker。这里有一篇不错的文章Why do we need SwingWorker?

请注意,swingWorker 只会执行一次。如果您想执行更多时间,您还必须查看javax.swing.Timer

注意,Swing 定时器的任务是在事件派发中执行的 线。这意味着任务可以安全地操作组件,但是 这也意味着任务应该快速执行。 如果任务可能 花点时间执行,然后考虑使用 SwingWorker 代替 或除了计时器之外。

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2015-05-15
    • 2020-07-16
    相关资源
    最近更新 更多