PDA

Visualizza la versione completa : [JAVA] Gestione errori


morphy79
24-10-2005, 11:42
ho un grosso dubbio sulla gestione di errori...

mettiamo che devo eseguire 2 differenti operazioni in cascata e su 2 classi diverse, ad esempio la copia BAK di un files e se questa riesce, la scrittura di una nuova riga sull'originale..

CLASSE 1
copia del file

CLASSE 2
aggiunta riga su un file

CLASSE PRINCIPALE
chiamata funzione copia classe 1
chiamata funzione aggiunta riga classe 2
segnalazione eventuali errori

come la fareste ???

perchè io metto in ogni funzione un boolean di ritorno e poi lavoro su quello...

CLASSE 1
try{
copia del file
return true
}catch(Exception e){
return false
}


CLASSE 2
try{
aggiunta riga su un file
return true
}catch(Exception e){
return false
}

CLASSE PRINCIPALE
boolean operazioneRiuscita = false
operazioneRiuscita = chiamata funzione copia classe 1
if operazioneRiuscita = true{
operazioneRiuscita = chiamata funzione aggiunta riga classe 2
}
if operazioneRiuscita = false{
segnalazione che ci sono stati errori
}

funziona sicuro, ma fa veramente schifo come ottimizzazione del codice !!!!!!!!!!!!!!!! :D

LeleFT
24-10-2005, 15:36
Una "miglioria" nella struttura del codice:


if (!chiamata_funzione_classe1) {
// Messaggio errore: la prima funzione non è andata a buon fine
} else {
if (!chiamata_funzione_classe2) {
// Messaggio errore: la seconda funzione non è andata a buon fine
}
}

Ciao. :ciauz:

morphy79
24-10-2005, 15:48
:(
..io però credevo ci fosse un modo per catturare l'eccezione...

qualcosa del tipo che la CLASSE 1 e la CLASSE 2 catturano un errore, lo stesso errore, come se si trovassero entrambe tra un try/catch...

e pensavo che questa gestione si acesso utilizzando un throw Excepion classeErrorePersonalizzata...

mi aiutate a far chiarezza su sta cosa ???

LeleFT
24-10-2005, 17:52
Certo... puoi anche far lanciare delle eccezioni. A questo punto, però, è inutile far ritornare true/false ai metodi.

Semplicemente nel blocco catch delle due classi, inserisci un'istruzione di questo tipo:


throw new NomeTuaEccezione(...);

e nella classe principale inserisci la chiamata ai due metodi delle classi in un blocco try/catch che recupera l'eccezione.

Sarebbe bello che ciascuna delle due classi lanciasse una eccezione di tipo diverso. La classe 1 lanciasse ad esempio l'eccezione CopiaException e la classe 2 lanciasse l'eccezione AggiornaException entrambe derivate da TuaException. A questo punto il codice diventerebbe:


try {
classe1.metodo();
classe2.metodo();
} catch (TuaException te) {
System.out.println( te );
}

e nelle classi:


try {
copia di backup
} catch (Exception e) {
throw new CopiaException("Errore nella copia backup"
}

...

try {
aggiornamento
} catch (Exception e) {
throw new AggiornamentoException("Errore nell'aggiornamento"
}

Entrambe CopiaException e AggiornamentoException dovrebbero ereditare da TuaException.


Ciao. :ciauz:

morphy79
24-10-2005, 19:14
fichisssimo !!!!!!
però... :jam: ...

mi fai un esempio di classe TuaException e di CopiaException ???
non saprei cosa scriverci dentro !!!!!!!!!!!!!! :zizi:

morphy79
25-10-2005, 10:57
up :cry:

morphy79
26-10-2005, 17:28
perchè nessuno mi risponde... son 2 giorni che piango su sta cosa !!!
non trovo in rete nessuna risposta a sta domanda.. :cry:
Vi prego aiutatemi !!!! :cry:

Andrea1979
26-10-2005, 20:18
public class MiaException extends Exception /* o qualunque altro tipo di eccezione che ti pare più consono */ {
public MiaException() {
super();
}
public MiaException (String err) {
super(err);
}
}


Saprai tu in che caso i tuoi metodi lanceranno il tuo nuovo tipo di eccezione...

morphy79
27-10-2005, 13:08
e la classe copiaException è giusta così ??



public class CopiaException extends MyException {

public CopiaException() {
super("Eccezione copia");
}

public CopiaException(String str) {
super(str);
}

public String toString() {
return getMessage() + ": errore copia";
}

}

Andrea1979
27-10-2005, 14:22
Troppa grazia!

Bastava:



public class CopiaException extends MyException {
public CopiaException() {
super();
}

public CopiaException(String str) {
super(str);
}
}


il metodo toString c'è già in Exception (da cui viene MyException)

Loading