Porównywanie klas Error

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Język ActionScript zapewnia wiele predefiniowanych klas Error. Można jednak użyć tych samych klas Error we własnym kodzie. W języku ActionScript 3.0 istnieją dwa główne typy klas Error : główna klasa Error języka ActionScript oraz klasy Error pakietu flash.error. Pakiet flash.error składa się z dodatkowych klas wprowadzonych, aby ułatwić programistom tworzenie i debugowanie aplikacji w języku ActionScript 3.0.

Główne klasy Error języka

Głównymi klasami błędów języka są: Error, ArgumentError, EvalError, RangeError, ReferenceError, SecurityError, SyntaxError, TypeError, URIError i VerifyError. Każda z tych klas umieszczona jest w przestrzeni nazw najwyższego poziomu.

Nazwa klasy

Opis

Uwagi

Error

Klasa Error może być używana do generowania wyjątków i jest klasą bazową dla innych klas wyjątków zdefiniowanych w języku ECMAScript: EvalError, RangeError, ReferenceError, SyntaxError, TypeError i URIError.

Klasa Error służy jako klasa bazowa dla wszystkich błędów czasu wykonywania i jest zalecaną klasą bazową dla wszystkich niestandardowych klas.

ArgumentError

Klasa ArgumentError reprezentuje błąd, który pojawia się, gdy wartości parametru dostarczone podczas wywołania funkcji są niezgodne z parametrami zdefiniowanymi dla funkcji.

Niektóre przykłady błędów dotyczących argumentu obejmują:

  • Zbyt mała lub zbyt duża ilość argumentów dostarczonych do metody.

  • Oczekiwano dla argumentu wartości numerycznej, która nie została dostarczona.

EvalError

Wyjątek EvalError generowany jest, gdy dowolny z parametrów przekazany zostanie do konstruktora klasy Function lub w kodzie użytkownika wywołana zostanie funkcja eval() .

W języku ActionScript 3.0 obsługa funkcji eval() została usunięta i próby jej uruchomienia powodują wygenerowanie błędu.

Wcześniejsze wersje programu Flash Player używały funkcji eval() w celu uzyskania dostępu do zmiennych, właściwości, obiektów lub klipów filmowych na postawie nazwy.

RangeError

Wyjątek RangeError generowany jest, gdy wartość numeryczna wykracza poza dopuszczalny zakres.

Na przykład: wyjątek RangeError wygenerowany zostanie przez klasę Timer, jeśli opóźnienie było ujemne lub nie było wartością skończoną. Wyjątek RangeError może również zostać wygenerowany przy próbie dodania obiektu wyświetlanego na niepoprawnej głębokości.

ReferenceError

Wyjątek ReferenceError jest generowany wtedy, gdy w przypadku obiektu statycznego (a nie dynamicznego) program próbuje odwołać się do niezdefiniowanej właściwości. Kompilatory ActionScript w wersjach sprzed języka ActionScript 3.0 nie generują błędów podczas próby dostępu do właściwości, która jest właściwością typu undefined . Jednak język ActionScript 3.0 w takim wypadku zgłasza wyjątek ReferenceError.

Wyjątki dla niezdefiniowanych zmiennych wskazują potencjalne błędy pomagające w polepszaniu jakości oprogramowania. Jeśli jednak programista nie jest przyzwyczajony do inicjalizowania zmiennych, nowe zachowanie języka ActionScript może wymusić kilka zmian w nawykach pisania kodu.

SecurityError

Wyjątek SecurityError jest generowany, gdy naruszone zostało bezpieczeństwo i odmówiono dostępu.

Niektóre przykłady błędów dotyczących bezpieczeństwa obejmują:

  • Próba nieuprawnionego dostępu do właściwości lub wywołania metody poprzez zabezpieczenia izolowanego obszaru.

  • Próba uzyskania dostępu do adresu URL niedozwolonego dla obszaru izolowanego.

  • Podjęto próbę nawiązania połączenia przez gniazdo z portem, ale wymagany plik strategii gniazda nie był dostępny.

  • Podjęto próbę uzyskania dostępu do kamery lub mikrofonu użytkownika, a użytkownik odmówił dostępu do urządzenia.

SyntaxError

Wyjątek SyntaxError generowany jest podczas błędu analizy składni w kodzie ActionScript.

Wyjątek SyntaxError może zostać wygenerowany w następujących okolicznościach:

  • Język ActionScript zgłasza wyjątki SyntaxError, gdy klasa RegExp analizuje niepoprawne wyrażenie regularne.

  • Język ActionScript zgłasza wyjątki SyntaxError, gdy klasa XMLDocument analizuje niepoprawny kod XML.

TypeError

Wyjątek TypeError jest generowany, kiedy rzeczywisty typ operandu jest różny od oczekiwanego.

Wyjątek TypeError może zostać wygenerowany w następujących okolicznościach:

  • Rzeczywisty parametr funkcji lub metody nie mógł zostać przekonwertowany na formalny typ parametru.

  • Wartość jest przypisana do zmiennej i nie można jej przekonwertować do typu zmiennej.

  • Typ prawej strony dla operatora is lub instanceof nie jest poprawy.

  • Nastąpiło niepoprawne użycie słowa kluczowego super .

  • Wyszukiwanie właściwości skutkuje więcej niż jednym powiązaniem i z tego względu jest niejednoznaczne.

  • Wywołana została metoda dla niezgodnego obiektu. Na przykład: wyjątek TypeError generowany jest, gdy metoda klasy RegExp jest „przeszczepiana” do obiektu ogólnego, a następnie wywoływana.

URIError

Wyjątek URIError jest generowany, kiedy jedna z funkcji globalnych obsługi URI używana jest w sposób niekompatybilny z jego definicją.

Wyjątek URIError może zostać wygenerowany w następujących okolicznościach:

Niepoprawny URI został określony dla funkcji interfejsu API programu Flash Player, która oczekuje poprawnego URI, np. Socket.connect() .

VerifyError

Wyjątek VerifyError jest generowany po napotkaniu źle sformułowanego lub uszkodzonego pliku SWF.

Jeśli plik SWF ładuje inny plik SWF, nadrzędny SWF może przechwycić wyjątek VerifyError wygenerowany przez załadowany plik SWF.

klasy Error pakietu flash.error

Pakiet flash.error zawiera klasy Error, które są częścią uwzględnianą przez interfejs API środowiska wykonawczego Flash. W porównaniu z opisanymi klasami Error pakiet flash.error porozumiewa się ze zdarzeniami błędu charakterystycznymi dla środowisk wykonawczych Flash (takich jak program Flash Player lub środowisko Adobe AIR).

Nazwa klasy

Opis

Uwagi

EOFError

Próba odczytu z obszaru wykraczającego poza dostępne dane powoduje wyjątek EOFError.

Wyjątek EOFError jest generowany np. wtedy, gdy zostanie wywołana jedna z metod odczytu w interfejsie IDataInput, ale nie ma wystarczającej ilości danych do zrealizowania żądania.

IllegalOperationError

Wyjątek IllegalOperationError jest generowany, gdy metoda nie została zaimplementowana lub implementacja nie pokrywa bieżącego użycia.

Przykłady niedozwolonych wyjątków dotyczących błędów operacji obejmują:

  • Klasa bazowa (np. DisplayObjectContainer) zapewnia większą funkcjonalność niż stół montażowy jest w stanie obsłużyć. Na przykład: jeśli nastąpi próba pobrania lub ustawienia maski na stole montażowym (za pomocą właściwości stage.mask ), środowisko wykonawcze Flash wygeneruje wyjątek IllegalOperationError z komunikatem „Klasa Stage nie implementuje tej właściwości lub metody.”

  • Podklasa dziedziczy metodę, która nie jest wymagana i której obsługa nie jest konieczna.

  • Pewne metody dostępności wywoływane są, gdy program Flash Player kompilowany jest bez obsługi dostępności.

  • Elementy służące tylko do tworzenia wywoływane są z wersji programu Flash Player ze środowiskiem wykonawczym.

  • Programista próbuje ustawić nazwę dla obiektu umieszczonego na osi czasu.

IOError

Wyjątek IOError jest generowany w momencie pojawienia się niektórych typów wyjątków wejścia/wyjścia.

Ten błąd występuje na przykład, gdy nastąpi próba wykonania operacji odczytu-zapisu dla gniazda, które nie jest połączone lub zostało rozłączone.

MemoryError

Wyjątek MemoryError zostanie wygenerowany w przypadku nieudanego żądania alokacji pamięci.

Domyślnie ActionScript Virtual Machine 2 nie ogranicza ilości pamięci, jaką program ActionScript może zaalokować. W systemach desktop błędy alokacji pamięci zdarzają się rzadko. Błąd zostanie wygenerowany, gdy system nie jest w stanie zaalokować pamięci wymaganej dla operacji. Dlatego w systemach desktop ten wyjątek jest rzadki chyba, że żądanie alokacji jest bardzo duże; np. żądanie dla 3 miliardów bajtów jest niemożliwe ponieważ 32-bitowy system Microsoft® Windows® może uzyskać dostęp tylko do 2 GB przestrzeni adresowej.

ScriptTimeoutError

Wyjątek ScriptTimeoutError jest generowany po przekroczeniu limitu czasu skryptu. Przez przechwycenie wyjątku ScriptTimeoutError przekroczenie limitu czasu można obsłużyć bardziej elegancko. Jeśli nie istnieje żaden moduł obsługi wyjątku, moduł obsługi nieprzechwyconego wyjątku wyświetli okno dialogowe z komunikatem o błędzie.

Aby zapobiec złośliwemu programiście przechwytywanie wyjątku i pozostanie w nieskończonej pętli, w przebiegu konkretnego skryptu przechwycony może zostać tylko pierwszy wyjątek ScriptTimeoutError. Kolejnego wyjątku ScriptTimeoutError nie można przechwycić w kodzie i zostanie on natychmiast przekazany do modułu obsługi nieprzechwyconego wyjątku.

StackOverflowError

Wyjątek StackOverflowError zostanie generowany w przypadku wyczerpania stosu zarezerwowanego dla skryptu

Wyjątek StackOverflowError może wskazywać pojawienie się nieskończonej rekurencji.