Error クラスの比較

Flash Player 9 以降、Adobe AIR 1.0 以降

ActionScript には多数の定義済み Error クラスがあります。 一方、アプリケーションのコードでも同じ Error クラスを使用できます。ActionScript 3.0 の Error クラスは、ActionScript コア Error クラスと flash.error パッケージ Error クラスの 2 つに大別されます。 flash.error パッケージには、ActionScript 3.0 のアプリケーション開発およびデバッグを支援するクラスが追加されています。

コア Error クラス

コア Error クラスとしては、Error、ArgumentError、EvalError、RangeError、ReferenceError、SecurityError、SyntaxError、TypeError、URIError、VerifyError の各クラスがあります。いずれのクラスもトップレベルの名前空間に属します。

クラス名

説明

注記

Error

Error クラスは例外をスローするためのクラスであり、ECMAScript に定義されている他の例外クラス(EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError)の基本クラスです。

Error クラスはすべてのランタイムエラーの基本クラスであるだけでなく、独自に作成する Error クラスの基本クラスとすることが推奨されています。

ArgumentError

ArgumentError クラスは、関数呼び出しで指定されたパラメーターの値がその関数の定義に適合していないために発生するエラーを表します。

例えば、次のような状況でパラメーターエラーが発生します。

  • メソッドに対して指定された引数の個数が多すぎる、または少なすぎる場合。

  • 列挙のメンバーを指定することが要求される引数に、それ以外の値が指定された場合。

EvalError

EvalError 例外は、Function クラスのコンストラクターにパラメーターが渡された場合または eval() 関数がユーザーコードで呼び出された場合にスローされます。

ActionScript 3.0 では eval() 関数のサポートが除外されており、この関数を使用するとエラーが発生します。

Flash Player の以前のバージョンでは、変数、プロパティ、オブジェクトまたはムービークリップに名前でアクセスする際に eval() 関数が使用されていました。

RangeError

RangeError 例外は、数値の値が許容される範囲に収まらない場合にスローされます。

例えば、Timer クラスに対する遅延の指定が負の値や無限である場合は RangeError がスローされます。また、表示オブジェクトを無限の深度に追加しようとした場合も RangeError がスローされます。

ReferenceError

ReferenceError 例外は、sealed 指定された(動的でない)オブジェクトに対して未定義プロパティを参照しようとした場合にスローされます。 ActionScript 3.0 より前のバージョンでは、 undefined であるプロパティにアクセスしようとしても ActionScript コンパイラーのエラーはスローされませんでした。ただし、ActionScript 3.0 ではこの状況で ReferenceError 例外をスローします。

未定義の変数に関する例外は潜在的なバグの発見につながり、ソフトウェア品質の向上に役立ちます。 しかし、変数を初期化する必要がない従来の仕様に慣れた開発者は、ActionScript の動作が変更されたことによりコーディング上の習慣を変更する必要があります。

SecurityError

SecurityError 例外は、セキュリティ違反が発生してアクセスが拒否された場合に発生します。

例えば、次のような状況でセキュリティエラーが発生します。

  • セキュリティサンドボックスの境界をまたいで、許可されていないプロパティアクセスやメソッド呼び出しを実行した場合。

  • セキュリティサンドボックスで許可されていない URL にアクセスしようとした場合。

  • ポートへのソケット接続が試行されたけれども、必要なソケットポリシーファイルが存在しなかった場合。

  • ユーザーのカメラやマイクへのアクセスを試み、そのアクセスがユーザーによって拒否された場合。

SyntaxError

SyntaxError 例外は、ActionScript コード内で解析エラーが発生した場合にスローされます。

SyntaxError は次の状況でスローされます。

  • ActionScript では、RegExp クラスで無効な正規表現を解析した場合に SyntaxError 例外をスローします。

  • ActionScript では、XMLDocument クラスで無効な XML を解析した場合に SyntaxError 例外をスローします。

TypeError

TypeError 例外は、オペランドに要求される型と実際の型が異なる場合にスローされます。

TypeError は次の状況でスローされます。

  • 関数またはメソッドの実際のパラメーターを、形式上必要とされるパラメーターの型に変換できない場合。

  • 変数に割り当てられた値を、その変数の型に強制的に変換できない場合。

  • is または instanceof 演算子の右辺が有効な型でない場合。

  • super キーワードの使用方法が不正な場合。

  • プロパティへの参照が複数のバインディングに解決され、結果があいまいである場合。

  • 互換性のないオブジェクトに対してメソッドが呼び出された場合。例えば、RegExp クラスのメソッドが汎用オブジェクトに「移植」されて呼び出された場合に TypeError 例外がスローされます。

URIError

URIError 例外は、グローバルな URI 処理関数のいずれかが定義に合わない方法で使用された場合にスローされます。

URIError は次の状況でスローされます。

有効な URL を必要とする Flash Player API 関数( Socket.connect() など)に対し、無効な URI を指定した場合。

VerifyError

VerifyError 例外は、不正な形式または破損した SWF ファイルが検出された場合にスローされます。

SWF ファイルが別の SWF ファイルをロードした場合、親の SWF ファイルはロードされた SWF ファイルが生成する VerifyError をキャッチできます。

flash.error パッケージ Error クラス

flash.error パッケージの Error クラスは、Flash ランタイム API の一部と見なされます。前述した他の Error クラスと違い、flash.error パッケージは Flash ランタイム(Flash Player や Adobe AIR など)に特有のエラーイベントを伝達するために使用されます。

クラス名

説明

注記

EOFError

EOFError 例外は、取得できるデータの末尾よりも後の部分を読み取ろうとした場合にスローされます。

例えば、IDataInput インターフェイスの読み取りメソッドのいずれかを呼び出したとき、その読み取り要求を満たす量のデータが存在しない場合は EOFError がスローされます。

IllegalOperationError

IllegalOperationError 例外は、メソッドが実装されていないか、使用方法に実装が対応していない場合にスローされます。

例えば、次のような状況で無効な操作エラーの例外が発生します。

  • 基本クラス(DisplayObjectContainer など)に、ステージでサポートされている範囲を超えた機能がある場合。 例えば、 stage.mask を使用してステージ上のマスクを取得または設定しようとすると、Flash ランタイムにより「Stage クラスは、このプロパティまたはメソッドを実装しません」というメッセージと共に IllegalOperationError がスローされます。

  • サブクラスで、継承する必要がなくサポートすると不都合が生じるようなメソッドを継承した場合。

  • アクセシビリティのサポートを含めずにコンパイルされた Flash Player の環境で、特定のアクセシビリティ関連メソッドを呼び出した場合。

  • ランタイムバージョンの Flash Player でオーサリング専用の機能を呼び出した場合。

  • タイムライン上に配置されたオブジェクトに対して名前を設定しようとした場合。

IOError

IOError 例外は、ある種の I/O 例外が発生した場合にスローされます。

例えば、未接続または切断済みのソケットに対して読み書き操作を実行しようとすると、このエラーが発生します。

MemoryError

MemoryError 例外は、メモリ割り当て要求が失敗した場合にスローされます。

デフォルトでは、ActionScript 仮想マシン 2 は ActionScript プログラムが割り当てを受けられるメモリの量を制限しません。デスクトップシステム環境では、メモリ割り当て失敗は頻繁に発生するエラーではありません。操作に必要とされるメモリをシステムが割り当てられないという状況は、 デスクトップシステムではほとんど発生しないからです。32 ビット Microsoft® Windows® プログラム(アドレス空間が 2 GB)で 3 GB の割り当てを要求した場合などは、要求を満たすことが不可能であるため、この例外が発生します。

ScriptTimeoutError

ScriptTimeoutError 例外は、スクリプトのタイムアウト間隔である 15 秒が経過した場合にスローされます。 ScriptTimeoutError 例外をキャッチすると、スクリプトのタイムアウトをより安全な方法で処理できます。 例外ハンドラーを用意しない場合は、不明な例外のハンドラーによってダイアログボックスにエラーメッセージが表示されます。

悪意のある開発者によってこの例外がキャッチされ、無限ループから脱出できない事態が発生するのを防ぐために、1 つのスクリプトについて実行中にスローされる ScriptTimeoutError 例外は最初の 1 回しかキャッチできません。 それ以降の ScriptTimeoutError 例外はアプリケーションのコードではキャッチされず、不明な例外のハンドラーが直ちに実行されます。

StackOverflowError

StackOverflowError 例外は、当該スクリプトで使用できるスタックを使い切った場合にスローされます。

StackOverflowError 例外は、無限の再帰が発生したことを示す場合があります。