当使用Thread.sleep(x)或wait()时,我得到exception

我试图拖延 – 或者让我睡觉 – 我的Java程序,但发生错误。

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

未报告的exceptionjava.lang.InterruptedException; 必须被逮捕或宣布被抛出。

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

你有很多的阅读。 从编译器错误到exception处理,线程和线程中断。 但是,这将做你想要的:

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

正如其他用户所说,您应该用try{...} catch{...}块来包围您的呼叫。 但是自Java 1.5发布以来,就有了和Thread.sleep(millis)一样的TimeUnit类,但是更方便。 你可以select时间单位进行睡眠操作。

 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文档

看看这个优秀的简短的post ,如何正确地做到这一点。

本质上:捕获InterruptedException 。 请记住,您必须添加此catch-block。 这个post进一步解释了这一点。

使用以下编码结构来处理exception

 try { Thread.sleep(1000); } catch (InterruptedException ie) { //Handle exception } 

把你的Thread.sleep放在一个try catch块中

 try { //thread to sleep for the specified number of milliseconds Thread.sleep(100); } catch ( java.lang.InterruptedException ie) { System.out.println(ie); } 

当使用Android (唯一一次使用Java)时,我会build议使用处理程序,而不是让线程进入睡眠状态。

 final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Log.i(TAG, "I've waited for two hole seconds to show this!"); } }, 2000); 

参考: http : //developer.android.com/reference/android/os/Handler.html

尝试这个:

 try{ Thread.sleep(100); }catch(Exception e) { System.out.println("Exception caught"); } 

我的方式来延迟Java程序。

 public void pause1(long sleeptime) { try { Thread.sleep(sleeptime); } catch (InterruptedException ex) { //ToCatchOrNot } } public void pause2(long sleeptime) { Object obj = new Object(); if (sleeptime > 0) { synchronized (obj) { try { obj.wait(sleeptime); } catch (InterruptedException ex) { //ToCatchOrNot } } } } public void pause3(long sleeptime) { expectedtime = System.currentTimeMillis() + sleeptime; while (System.currentTimeMillis() < expectedtime) { //Empty Loop } } 

这是为了顺序延迟,但是对于循环延迟,请参阅Java延迟/等待 。

 public static void main(String[] args) throws InterruptedException { //type code short z=1000; Thread.sleep(z);/*will provide 1 second delay. alter data type of z or value of z for longer delays required */ //type code } 

例如:-

 class TypeCasting { public static void main(String[] args) throws InterruptedException { short f = 1; int a = 123687889; short b = 2; long c = 4567; long d=45; short z=1000; System.out.println("Value of a,b and c are\n" + a + "\n" + b + "\n" + c + "respectively"); c = a; b = (short) c; System.out.println("Typecasting..........."); Thread.sleep(z); System.out.println("Value of B after Typecasting" + b); System.out.println("Value of A is" + a); } } 

或者,如果您不想处理线程,请尝试以下方法:

 public static void pause(int seconds){ Date start = new Date(); Date end = new Date(); while(end.getTime() - start.getTime() < seconds * 1000){ end = new Date(); } } 

它在你调用它的时候开始,当秒数已经过去时结束。