2012-12-22 7 views
23

Jestem nowicjuszem w Javie i nowością w programowaniu (wiem, że nurkowanie prosto na Javę prawdopodobnie nie było najlepszym pomysłem.) I ciągle dostaję błąd bez względu na to, jak próbuję dodać pauzę do mojego programu . Robię prosty program zliczający i chcesz dodać jedną sekundowego opóźnienia między każdego numeru Oto kod mam tak daleko:Jak naprawić błąd kompilacji dla nieobsługiwanego wyjątku podczas wywołania Thread.sleep()?

import java.lang.*; 

public class Counter 
{ 
    public static void main(String[]args) 
    { 
     int i; 

     for (i = 0; i <= 10; i++) 
     { 
      Thread.sleep(1000); 
      System.out.println(i); 
     } 
     System.out.println("You can count to ten."); 
    } 
} 

Wezwanie do Thread.sleep() nie będzie skompilować. javac kompilator mówi, „nieudokumentowanych wyjątek InterruptedException; musi być złapany lub zadeklarowanej być wyrzucane” Eclipse i mówi: „Nieobsługiwany typ wyjątku InterruptedException”

+6

I co, że błąd będzie? –

+2

Błąd kompilacji, ponieważ 'Thread.sleep()' może rzucić 'InterruptedException'. –

+2

@AndrewLogvinov - Tak, * I * wiesz, że ... punkt jest, że kwestia wymaga poprawy;) –

Odpowiedz

56

Thread.Sleep może rzucić InterruptedException która jest sprawdzana wyjątkiem. Wszystkie sprawdzone wyjątki muszą zostać przechwycone i obsłużone lub musisz zadeklarować, że twoja metoda może je wyrzucić. Musisz to zrobić bez względu na to, czy wyjątek zostanie faktycznie zgłoszony. Brak deklaracji sprawdzanego wyjątku, który może wyrzucić twoja metoda, jest błędem kompilacji.

albo trzeba go złapać:

try { 
    Thread.sleep(1000); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
    // handle the exception...   
    // For example consider calling Thread.currentThread().interrupt(); here. 
} 

albo uznać, że metoda może rzucać InterruptedException:

public static void main(String[]args) throws InterruptedException 

Podobne

+0

+1 - z sugestią, że dla początkującego może link do samouczka oracle na temat wyjątków i wskazanie javadoc określa, które wyjątki może wyrzucić metoda. (** Edycja: ** czytasz moje zdanie) –

+0

Dziękuję Mark za odpowiedź, ale teraz zostawiłeś mnie zastanawiając się, dlaczego musiałbym zadeklarować wyjątek w pierwszej kolejności. Brian, czy nie miałbyś takiego linku do tutoriala na temat wyjątków? –

+0

@ Mr.Crippled brakuje tutaj tego punktu, deklaracja nie oznacza wyrzucenia wyjątku, a wyjątek może zostać rzucony, a zatem powinien być złapany przez dzwoniącego i działał odpowiednio (lub złapać go samemu i podjąć działanie otaczając go w blok try/catch). Teraz jest również niezaznaczony wyjątek (w czasie wykonywania), którego nie trzeba deklarować, np. NullPointerException, odznaczono wyjątek i nie trzeba go deklarować. Dlaczego tak? Dobrze sprawdzony wyjątek pozwala go złapać i działać na nim lub pozwolić, aby dzwoniący sobie z nim poradził, ale z wyjątkami niesprawdzonymi (uruchomieniowymi), których najbardziej oczekujesz od awarii systemu. – sactiw

-3

można pozbyć się w pierwszej linii. Nie trzeba import java.lang.*;

Wystarczy zmienić 5th wiersz:

public static void main(String [] args) throws Exception 
Powiązane problemy