2012-02-29 6 views
6

Sono un programmatore C e sto imparando alcuni java recentemente perché sto sviluppando un'applicazione Android. Attualmente sono in una situazione. Seguito è quelloCome propagare un'eccezione in java

public Class ClassA{ 

public ClassA(); 

public void MyMethod(){ 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    catch(ExceptionType2 Excp2){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    } 
} 

Ora voglio usare il metodo MyMethod() da qualche altra parte in un'altra classe. Se qualcuno può fornirmi qualche frammento di codice su come propagare le eccezioni al chiamante di MyMethod() in modo che possa visualizzarle in una finestra di dialogo nel metodo del chiamante.

Scusa se non sono così chiaro e strano nel modo di fare questa domanda.

+1

Vedere anche http://stackoverflow.com/questions/409563/best-prac tices-per-eccezioni-gestione-in-java-o-c-sharp – mglauche

risposta

20

Basta non intercettare l'eccezione, in primo luogo, e cambiare la tua dichiarazione di metodo in modo che li può propagare:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // Some code here which can throw exceptions 
} 

Se avete bisogno di prendere qualche azione e poi propagano, si può rigenerare esso:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    try { 
     // Some code here which can throw exceptions 
    } catch (ExceptionType1 e) { 
     log(e); 
     throw e; 
    } 
} 

Qui ExceptionType2 non e 'colto a tutti - sarà solo propagare automaticamente. ExceptionType1 viene rilevato, registrato e quindi retrocesso.

E 'Non una buona idea avere blocchi catch che appena rethrow un'eccezione - a meno che non ci sia qualche sottile motivo (ad esempio, per evitare un blocco più generale presa dalla manipolazione di esso) si dovrebbe normalmente basta rimuovere il blocco catch invece .

0

Proprio rigenerare l'eccezione

throw Excp1;

Sarà necessario aggiungere il tipo di eccezione per la dichiarazione MyMthod() come questo

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
     throw Excp1; 
    } 
    catch(ExceptionType2 Excp2){ 
     throw Excp2; 
    } 
} 

O semplicemente omettere il try affatto poiché non si è più gestire le eccezioni, a meno che non si inserisca un codice in più nelle istruzioni catch facendo le cose con l'eccezione prima di rilanciarlo.

2

Non afferrarlo e ricominciare di nuovo. Basta fare questo e prenderlo nel luogo che si desidera

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // other code 
} 

Esempio

public void someMethod() { 
    try { 
     myMethod(); 
    } catch (ExceptionType1 ex) { 
     // show your dialog 
    } catch (ExceptionType2 ex) { 
     // show your dialog 
    } 
} 
0

faccio sempre così:

public void MyMethod() throws Exception 
{ 
    //code here 
    if(something is wrong) 
     throw new Exception("Something wrong"); 
} 

poi quando si chiama la funzione

try{ 
    MyMethod(); 
    }catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 
Problemi correlati