Wanneer u met synchrone uitvoeringsfouten werkt, gebruikt u de instructies
try..catch..finally
om fouten af te vangen. Wanneer een uitvoeringsfout optreedt, genereert Flash runtime een uitzondering. Dit betekent dat Flash runtime de normale uitvoering opschort en een speciaal object van het type Error maakt. Dit object wordt vervolgens gegenereerd voor het eerste beschikbare blok
catch
.
De instructie
try
omsluit instructies die aanleiding kunnen geven tot fouten. U moet de instructie
catch
altijd gebruiken met een instructie van het type
try
. Als een fout wordt gevonden in een van de instructies in het blok van de instructie
try
, worden de
catch
-instructies die bij die
try
-instructie horen uitgevoerd.
De instructie
finally
omsluit instructies die hoe dan ook worden uitgevoerd, of er nu wel of niet een fout optreedt in het blok
try
. Als er geen fout optreedt, worden de instructies in het blok
finally
uitgevoerd na afloop van de instructies uit het blok
try
. Als er wel een fout optreedt, wordt eerst de desbetreffende
catch
-instructie uitgevoerd en daarna komen de instructies uit het blok
finally
.
In de volgende code ziet u de syntaxis voor het gebruik van de instructies
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.
}
Elke instructie van het type
catch
identificeert een specifiek type uitzondering die de instructie afhandelt. Met
catch
kunnen alleen foutklassen worden opgegeven die een subklasse zijn van de klasse Error. Elke
catch
-instructie wordt in volgorde gecontroleerd. Alleen de eerste
catch
-instructie die met het type gegenereerde fout overeenkomt, wordt uitgevoerd. Met andere woorden: als u eerst de klasse Error van het hogere niveau controleert en vervolgens een subklasse van de klasse Error, komt alleen de klasse Error van het hogere niveau overeen. Dit wordt in de volgende code geïllustreerd:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
De vorige code geeft de volgende uitvoer weer:
<Error> I am an ArgumentError
Om de ArgumentError goed te kunnen afvangen moet u ervoor zorgen dat de meest specifieke fouttypen als eerste worden genoemd. De meer algemene fouttypen vermeldt u dan later, zoals in de volgende code wordt getoond:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Diverse methoden en eigenschappen in de ActionScript-API genereren uitvoeringsfouten als ze fouten tegenkomen tijdens de uitvoering. Zo genereert de methode
close()
in de klasse Sound een IOError als de methode niet in staat is om de audiostream te sluiten. Dit wordt getoond in de volgende code:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Naarmate u vertrouwder raakt met de
Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform
, zult u merken welke methoden uitzonderingen genereren. Dit wordt in de beschrijving van de methoden uitgelegd.