Podczas pracy z synchronicznymi błędami czasu wykonania w celu przechwycenia błędów należy używać instrukcji
try..catch..finally
. W momencie wystąpienia błędu czasu wykonywania środowisko wykonawcze Flash generuje wyjątek, który oznacza zawieszenie normalnego wykonywania i utworzenie specjalnego obiektu typu Error. Obiekt Error jest następnie generowany w pierwszym dostępnym bloku
catch
.
Instrukcja
try
obejmuje instrukcje, które potencjalnie mogą tworzyć błędy. Instrukcji
catch
należy zawsze używać z instrukcją
try
. Jeśli błąd wykryty zostanie w jednej z instrukcji bloku
try
, wykonane zostaną instrukcje
catch
dołączone do tej instrukcji
try
.
Instrukcja
finally
obejmuje instrukcje, które zostaną wykonane bez względu na wystąpienie błędu w bloku
try
. W przypadku braku błędu instrukcje bloku
finally
zostaną wykonane po zakończeniu instrukcji bloku
try
. W przypadku błędu najpierw wykonana zostanie odpowiednia instrukcja
catch
, po której następują instrukcje bloku
finally
.
Poniższy kod przedstawia składnię dla instrukcji
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.
}
Każda instrukcja
catch
identyfikuje konkretny typ wyjątku, który obsługuje. Instrukcja
catch
może określać tylko klasy błędu, które są podklasami klasy Error. Każda instrukcja
catch
sprawdzana jest w kolejności. Wykonana zostanie jedynie pierwsza instrukcja
catch
, która jest zgodna z wygenerowanym typem błędu. Innymi słowy: jeśli najpierw sprawdzona zostanie klasa Error wyższego poziomu, a następnie podklasa klasy Error, tylko klasa Error wyższego poziomu będzie klasą zgodną. Poniższy kod ilustruje tę sytuację:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
Powyższy kod wyświetla na wyjściu następujący wiersz:
<Error> I am an ArgumentError
Aby poprawnie przechwycić ArgumentError, należy upewnić się, że na początku wyświetlane są najbardziej charakterystyczne typy błędów, a bardziej ogólne typy błędów wyświetlane są w dalszej kolejności tak, jak przedstawia to poniższy kod:
try
{
throw new ArgumentError("I am an ArgumentError");
}
catch (error:ArgumentError)
{
trace("<ArgumentError> " + error.message);
}
catch (error:Error)
{
trace("<Error> " + error.message);
}
W momencie napotkania błędu podczas wykonywania kilka metod i właściwości interfejsu API ActionScript generuje błędy czasu wykonania. Na przykład metoda
close()
klasy Sound generuje błąd klasy IOError, jeśli metoda nie może zamknąć strumienia audio; przypadek został przedstawiony w poniższym kodzie:
var mySound:Sound = new Sound();
try
{
mySound.close();
}
catch (error:IOError)
{
// Error #2029: This URLStream object does not have an open stream.
}
Po bliższym zapoznaniu się ze
Skorowidzem języka ActionScript 3.0 dla platformy Adobe Flash
użytkownik dowie się, które metody generują wyjątki, ponieważ opis każdej metody zawiera odpowiednie informacje.