Originariamente inviato da costangelo81
Come ti dicevo l'errore lo introduco io passando un file vuoto, ma quello che non mi torna è il fatto che il programma entra nel catch passa per il metodo con cui intendo gestire l'errore ma in realtà quel metodo non fa nulla, mentre se lo eseguo fuori dal blocco funziona. Secondo te devo aggingere la clausula throws? ma non sono modi differenti di trattare le eccezioni?
aspetta un attimo, hai scritto in maniera impropria una struttura di controllo, il fatto che il programma ti funzioni lo devi al fatto che il tuo programma sia sintatticamente e lessicalmente corretto, cioé è formalmente corretto, il problema è che non ha logica.
La logica di un try-throw-catch te la detta all'inizio il throw e la sviluppa poi il catch.
tu stai dicendo, nel tuo programma:
codice:
cara VM prova a fare così{
}
se ti lancio una eccezione di tipo JDOMException fai questo {
}
se ti lancio una eccezione di tipo IOException fai questo {
}
e a questo punto dimmi, dov'è che crei i 2 oggetti di tipo IOException o di tipo JDOMException ?
risposta: da nessuna parte.
in quale punto del codice indichi una condizione per la quale deve sollevarsi una eccezione?
risposta: da nessuna parte.
in quale punto del codice indichi non solo la condizione ma cosa vuoi che avvenga al verificarsi di quella condizione?
risposta: da nessuna parte.
un esempio di come va usata questa struttura di controllo è il seguente
codice:
cara VM prova a fare così{
...
if ( numero<0 ) throw new Exception("questo programma non lavora con numeri negativi!");
...
}
se ti lancio una eccezione di tipo Exception che chiamo come ti indico tra parentesi fai questo {
...
System.out.println( eccezione.getMessage() );
...
}
con la sola sintassi java verrebbe qualcosa del tipo
codice:
try{
...
if ( numero<0 ) throw new Exception("questo programma non lavora con numeri negativi!");
...
}
catch ( Exception eccezione ) {
...
System.out.println( eccezione.getMessage() );
...
}
il metodo getMessage() è ereditato da tutti gli oggetti che rappresentano eccezioni, che sono creati da throw, quindi ce l'hai sempre disponibile in questi casi, e da come output quello che passi come stringa al metodo costruttore nel throw.