2012-12-22 20 views
23

Sono nuovo di Java e un po 'di nuovo alla programmazione (so che immergersi direttamente in Java probabilmente non era l'idea migliore) e ho riscontrato un errore costante, indipendentemente da come provassi ad aggiungere una pausa nel mio programma . Sto facendo un semplice programma di conteggio e si desidera aggiungere un ritardo di un secondo tra ogni numero qui è il codice che ho finora:Come posso risolvere un errore di compilazione per un'eccezione non gestita durante la chiamata a 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."); 
    } 
} 

La chiamata a Thread.sleep() non verrà compilato. Il compilatore javac dice "eccezione non segnalata InterruptedException; deve essere rilevato o dichiarato di essere gettato" e Eclipse dice "Tipo di eccezione non gestito InterruptedException"

+6

E quale sarebbe quell'errore essere? –

+2

Compilare errore poiché 'Thread.sleep()' potrebbe lanciare 'InterruptedException'. –

+2

@AndrewLogvinov - Sì, * I * so che ... il punto è che la domanda deve essere migliorata;) –

risposta

56

Thread.sleep può lanciare un'eccezione Interrupted che è un'eccezione controllata. Tutte le eccezioni controllate devono essere catturate e gestite o altrimenti devi dichiarare che il tuo metodo può lanciarlo. Devi farlo se l'eccezione verrà effettivamente lanciata o meno. Non dichiarare un'eccezione controllata che il tuo metodo può generare è un errore di compilazione.

vi sia bisogno di prenderlo:

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

o dichiarare che il metodo può lanciare un InterruptedException:

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

correlati

+0

+1 - con il suggerimento che per un principiante forse un collegamento al tutorial di oracle sulle eccezioni e indicando javadoc indica quali eccezioni possono essere lanciate da un metodo. (** Modifica: ** mi hai letto nella mente) –

+0

Grazie Mark per aver risposto, ma ora mi hai lasciato a chiedermi perché avrei dovuto dichiarare un'eccezione in primo luogo. Brian, non ti capita di avere il link al tutorial di oracle sulle eccezioni, vero? –

+0

@ Mr.Crippled ti manca il punto qui, la dichiarazione non significa lanciare un'eccezione, piuttosto un'eccezione può essere lanciata e quindi dovrebbe essere catturata dal chiamante e agire di conseguenza (o la si cattura lì da sola e agire circondandola in un blocco try/catch). Ora, esistono anche eccezioni non controllate (runtime) che non devono essere dichiarate, ad es. NullPointerException, è un'eccezione non controllata e non deve essere dichiarata. Perchè così? Un'eccezione ben controllata consente di prenderlo e di agire su di esso o lasciare che sia il chiamante a gestirlo, ma con le eccezioni non controllate (runtime) si preferisce che il sistema non funzioni. – sactiw

-3

Si può sbarazzarsi della prima linea. Non è necessario import java.lang.*;

solo cambiare la vostra linea 5 a:

public static void main(String [] args) throws Exception 
Problemi correlati