使用Thread.sleep(x)或wait()时出现异常

问题

我试图延迟 - 或者让我睡觉 - 我的Java程序,但是发生了错误。

我无法使用Thread.sleep(x)wait()。出现相同的错误消息:

未报告的异常java.lang.InterruptedException;必须被抓住或宣布被抛出。

在使用Thread.sleep()wait()方法之前是否需要任何步骤?


#1 热门回答(571 赞)

你面前有很多阅读。从编译器错误到异常处理,线程和线程中断。但这会做你想要的:

try {
    Thread.sleep(1000);                 //1000 milliseconds is one second.
} catch(InterruptedException ex) {
    Thread.currentThread().interrupt();
}

#2 热门回答(194 赞)

正如其他用户所说,你应该使用atry{...} catch{...}块来支持你的通话。但是自从Java 1.5发布以来,有一个TimeUnit类与**Thread.sleep(millis)**相同,但更方便。你可以选择睡眠操作的时间单位。

try {
    TimeUnit.NANOSECONDS.sleep(100);
    TimeUnit.MICROSECONDS.sleep(100);
    TimeUnit.MILLISECONDS.sleep(100);
    TimeUnit.SECONDS.sleep(100);
    TimeUnit.MINUTES.sleep(100);
    TimeUnit.HOURS.sleep(100);
    TimeUnit.DAYS.sleep(100);
} catch (InterruptedException e) {
    //Handle exception
}

它还有其他方法:TimeUnit Oracle Documentation


#3 热门回答(29 赞)

看看at this excellent brief post如何正确地做到这一点。

基本上:赶上InterruptedException。请记住,你必须添加此catch-block。该帖子进一步解释了这一点。