När du arbetar med synkrona körningsfel ska du använda
try..catch..finally
-satser för att fånga upp fel. När ett körningsfel inträffar genererar Flash-miljön ett undantag, vilket betyder att programmet upphör att köras normalt och ett specialobjekt av typen Error skapas. Objektet Error skickas sedan till det första tillgängliga
catch
-blocket.
Programsatsen
try
omsluter programsatser där fel kan uppstå. Du använder alltid programsatsen
catch
med en
try
-sats. Om ett fel upptäcks i någon av programsatserna i programsatsblocket
try
kommer den
catch
-sats som är kopplad till programsatsen
try
att köras.
Programsatsen
finally
omfattar programsatser som körs om ett fel inträffar i blocket
try
. Om det inte finns något fel kommer de programsatser som finns i blocket
finally
att köras när blockprogramsatsen
try
är avslutad. Om det finns ett fel kommer rätt
catch
-sats att köras först, följd av programsatserna i blocket
finally
.
Med följande kod demonstreras syntaxen som används för
try..catch..finally
-satser:
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.
}
Varje
catch
-sats identifierar en specifik typ av undantag som den hanterar. Programsatsen
catch
kan endast ange felklasser som är underklasser till klassen Error. Varje
catch
-sats kontrolleras i rätt ordning. Endast den första
catch
-satsen som överensstämmer med det aktuella felet körs. Med andra ord, om du först kontrollerar Error-klassen på en högre nivå och sedan en underklass till Error-klassen kommer endast den på den högre nivån att överensstämma. I följande exempel illustreras detta:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
Koden resulterar i följande utdata:
<Error> I am an ArgumentError
Om du vill kunna fånga upp ArgumentError ska du se till att det mest specifika felet listas först och att mer allmänna feltyper listas senare, vilket visas i nästa exempel:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Flera metoder och egenskaper i API:t för ActionScript resulterar i körningsfel om ett fel inträffar när de körs. Metoden
close()
i klassen Sound resulterar exempelvis i ett IOError-fel om metoden inte kan stänga ljudströmmen. Detta visas i nästa exempel:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Efterhand som du blir mer bekant med
Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen
kommer du att lära dig vilka metoder som genererar undantag, vilket beskrivs i avsnitten om de olika metoderna.