Wenn Sie mit synchronen Laufzeitfehlern arbeiten, verwenden Sie die
try..catch..finally
-Anweisungen zum Abfangen von Fehlern. Bei einem Laufzeitfehler gibt die Flash-Laufzeitumgebung einen Ausnahmefehler aus. Dies bedeutet, dass Flash Player die normale Ausführung unterbricht und ein spezielles Objekt mit dem Error-Typ erstellt. Das Error-Objekt wird dann an den ersten verfügbaren
catch
-Block übergeben.
Die
try
-Anweisung umschließt Anweisungen, die möglicherweise Fehler verursachen können. Die
catch
-Anweisung wird stets mit einer
try
-Anweisung verwendet. Wenn in einer Anweisung im
try
-Anweisungsblock ein Fehler auftritt, werden die
catch
-Anweisungen ausgeführt, die dieser
try
-Anweisung zugewiesen sind.
Die
finally
-Anweisung umschließt Anweisungen, die unabhängig davon ausgeführt werden, ob im
try
-Block ein Fehler aufgetreten ist. Wenn kein Fehler auftritt, werden nach Abschluss der Anweisungen im
try
-Block die Anweisungen innerhalb des
finally
-Blocks ausgeführt. Beim Auftreten eines Fehlers werden zuerst die entsprechende
catch
-Anweisung und dann die Anweisungen im
finally
-Block ausgeführt.
Der nachstehende Code veranschaulicht die Syntax für die Verwendung von
try..catch..finally
-Anweisungen:
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.
}
Jede
catch
-Anweisung kann einen bestimmten Ausnahmetyp verarbeiten. In
catch
-Anweisungen können nur Fehlerklassen angegeben werden, die Unterklassen der Error-Klasse sind. Jede
catch
-Anweisung wird in der angegebenen Reihenfolge überprüft. Nur die erste
catch
-Anweisung, die mit dem Typ des ausgelösten Fehlers übereinstimmt, wird ausgeführt. Wenn Sie erst die übergeordnete Error-Klasse und dann eine Unterklasse der Error-Klasse testen, wird daher nur eine Übereinstimmung mit der übergeordneten Error-Klasse erkannt. Dies wird mit dem folgenden Code veranschaulicht:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
Der vorstehende Code führt zu folgender Ausgabe:
<Error> I am an ArgumentError
Um „ArgumentError“ korrekt abzufangen, stellen Sie sicher, dass die spezifischeren Fehlertypen zuerst und die allgemeineren Fehlertypen später aufgeführt sind, wie im folgenden Code gezeigt:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
Verschiedene Methoden und Eigenschaften der ActionScript-API lösen Laufzeitfehler aus, wenn bei der Ausführung Fehler auftreten. Beispielsweise löst die
close()
-Methode der Sound-Klasse einen IOError aus, wenn der Audio-Stream mit der Methode nicht geschlossen werden kann, wie im folgenden Code dargestellt ist:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Wenn Sie mit dem
ActionScript 3.0-Referenzhandbuch für die Adobe Flash-Plattform
vertraut werden, merken Sie, welche Methoden Ausnahmen auslösen, wie in den Beschreibungen der einzelnen Methoden erläutert.