我试图在Java中做一些事情,我需要在while循环中等待/延迟一段时间。

while (true) {
    if (i == 3) {
        i = 0;
    }

    ceva[i].setSelected(true);

    // I need to wait here

    ceva[i].setSelected(false);

    // I need to wait here

    i++;
}

我想做一个音序器。

如何在Java中进行延迟?


当前回答

使用thread . sleep (1000);

1000是程序暂停的毫秒数。

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
}

其他回答

使用thread . sleep(100);。 时间单位为毫秒

例如:

public class SleepMessages {
    public static void main(String args[])
        throws InterruptedException {
        String importantInfo[] = {
            "Mares eat oats",
            "Does eat oats",
            "Little lambs eat ivy",
            "A kid will eat ivy too"
        };

        for (int i = 0;
             i < importantInfo.length;
             i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}

还有一种等待的方式。

你可以使用LockSupport方法,例如:

LockSupport.parkNanos(1_000_000_000); // Disables current thread for scheduling at most for 1 second

幸运的是,它们不会抛出任何受控异常。但另一方面,根据文档,有更多的理由启用线程:

其他线程以当前线程为目标调用unpark 其他线程中断当前线程

使用TimeUnit.SECONDS.sleep (1);或thread . sleep (1000);是可以接受的方法。在这两种情况下,你都必须捕获interruptedexception,这会使你的代码变得笨重。有一个名为MgntUtils的开源java库(由我编写),它提供的实用程序已经在内部处理InterruptedException。所以你的代码只包含一行:

TimeUtils.sleepFor(1, TimeUnit.SECONDS);

点击这里查看javadoc。您可以从Maven Central或Github访问库。关于图书馆的文章可以在这里找到

我知道这是一个非常老的帖子,但这可能会帮助到一些人: 你可以创建一个方法,所以当你需要暂停时,你可以输入pause(1000)或任何其他毫秒值:

public static void pause(int ms) {
    try {
        Thread.sleep(ms);
    } catch (InterruptedException e) {
        System.err.format("IOException: %s%n", e);
    }
}

它被插入到类内部的公共静态void main(String[] args)之上。然后,要调用该方法,键入pause(ms),但将ms替换为要暂停的毫秒数。这样,就不必在需要暂停时插入整个try-catch语句。

使用thread . sleep (1000);

1000是程序暂停的毫秒数。

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
}