Quando si lavora con errori in fase di runtime, utilizzate le istruzioni
try..catch..finally
per catturare gli errori. Quando si verifica un errore runtime, il runtime Flash genera un'eccezione, ovvero sospende la normale esecuzione del codice e crea un oggetto speciale del tipo Error. L'oggetto Error viene quindi rilevato dal primo blocco
catch
disponibile.
L'istruzione
try
racchiude istruzioni che hanno il potenziale di creare errori e viene sempre combinata a un'istruzione
catch.
Se viene rilevato un errore in una delle istruzioni del blocco
try
, le istruzioni
catch
collegate a quella particolare istruzione
try
vengono eseguite.
L'istruzione
finally
racchiude istruzioni eseguite indipendentemente dalla presenza di errori nel blocco
try
. In assenza di errori, le istruzioni del blocco
finally
vengono eseguite al termine delle istruzioni del blocco
try.
In presenza di un errore, viene innanzitutto eseguita l'istruzione
catch
appropriata seguita dalle istruzioni del blocco
finally
.
Il codice seguente dimostra la sintassi da impiegare per le istruzioni
try..catch..finally
:
try
{
// some code that could throw an error
}
catch (err:Error)
{
// code to react to the error
}
finally
{
// Code that runs whether an error was thrown. This code can clean
// up after the error, or take steps to keep the application running.
}
Ogni istruzione
catch
identifica un tipo di eccezione specifica da gestire. L'istruzione
catch
può specificare solo sottoclassi della classe Error. Le istruzioni
catch
vengono verificate in sequenza, ma viene eseguita solo la prima istruzione
catch
che coincide al tipo di errore generato. In altre parole, se controllate per prima la classe Error di livello più alto e quindi una sottoclasse di questa classe, solo la classe Error di livello più alto evidenzia una corrispondenza. Il codice seguente illustra questo punto:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
Il codice precedente visualizza il seguente output:
<Error> I am an ArgumentError
Per rilevare correttamente l'errore ArgumentError, verificate che i tipi specifici di errore siano elencati per primi seguiti dai tipi di errore più generici, come illustrato nel codice seguente:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Vari metodi e proprietà dell'API di ActionScript generano errori in fase di runtime se rilevano errori durante la loro esecuzione. Ad esempio, il metodo
close()
della classe Sound genera un errore IOError se il metodo non riesce a chiudere lo streaming audio, come illustrato nel codice seguente:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Man mano che acquisite dimestichezza con la
Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash
, vi renderete conto dei metodi che generano eccezioni, come illustrato nella descrizione dei singoli metodi.