Я получаю исключение при использовании Thread.sleep(x) или wait()

Я попытался задержать или спать - свою программу на Java, но возникает ошибка.

Я не могу использовать Thread.sleep(x) или wait(). Появится одно и то же сообщение об ошибке:

незарегистрированное исключение java.lang.InterruptedException; должны быть пойманы или объявлены брошенными.

Есть ли какой-либо шаг перед использованием методов Thread.sleep() или wait()?

Ответ 1

У вас много чтения перед вами. Из ошибок компилятора с помощью обработки исключений, потоков и прерываний потоков. Но это будет делать то, что вы хотите:

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

Ответ 2

Как говорят другие пользователи, вы должны окружить свой вызов блоком try{...} 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
}

Также он имеет дополнительные методы: Документация Oracle TimeUnit

Ответ 4

Используйте следующую конструкцию кодирования для обработки исключений

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

Ответ 5

Поместите свой Thread.sleep в блок catch try

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

Ответ 6

При использовании Android (единственный раз, когда я использую Java), я бы рекомендовал использовать обработчик вместо того, чтобы помещать поток в режим сна.

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

Ответ 7

Попробуйте следующее:

try{

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

Ответ 8

Мои способы добавления задержки к программе 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   
    }
}

Это для последовательной задержки, но для задержек Loop относятся к Java Delay/Wait.

Ответ 9

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);


  }
}

Ответ 10

Более простой способ подождать - использовать System.currentTimeMillis(), который возвращает число миллисекунд с полуночи 1 января 1970 года по UTC. Например, подождите 5 секунд:

public static void main(String[] args) {
    //some code
    long original = System.currentTimeMillis();
    while (true) {
        if (System.currentTimeMillis - original >= 5000) {
            break;
        }
    }
    //more code after waiting
}

Таким образом, вам не нужно гадать с потоками и исключениями. Надеюсь, это поможет!

Ответ 11

В качестве альтернативы, если вы не хотите заниматься потоками, попробуйте этот метод:

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

Он запускается, когда вы его вызываете, и заканчивается, когда прошло несколько секунд.