当使用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(); } }
它在你调用它的时候开始,当秒数已经过去时结束。