ActionScript オブジェクトに対するアクセス

FREObject クラスのインスタンスは、何らかの ActionScript クラスオブジェクトまたはプリミティブ型を表します。Java 実装内で FREObject インスタンスを使用すると、ActionScript データを操作できます。FREObject の主な使用目的は、Java 関数のパラメーターおよび戻り値の受け渡しです。

FREObject クラスには、関連付けられた ActionScript クラスオブジェクトまたはプリミティブ値にアクセスするための関数があります。使用する Java API は ActionScript オブジェクトの型によって異なります。使用できる型の種類は次のとおりです。

  • ActionScript プリミティブデータ型

  • ActionScript クラスオブジェクト

  • ActionScript String オブジェクト

  • ActionScript Array または Vector クラスオブジェクト

  • ActionScript ByteArray クラスオブジェクト

  • ActionScript BitmapData クラスオブジェクト

重要: FREObject にアクセスできるのは、それを「所有」する FREFunction 関数が動作しているのと同じスレッドのみです。なお、何らかの FREByteArray または FREBitmapData オブジェクトに対して acquire() メソッドを呼び出した後は、その FREByteArray または FREBitmapData オブジェクトに対して release() メソッドを呼び出すまでの間、どの ActionScript オブジェクトのメソッドにもアクセスできません。オブジェクトを acquire() でロックしている間、そのオブジェクトや他の FREObject に対して getProperty() setProperty() または callMethod() を呼び出すと IllegalStateException がスローされます。

FREObject の有効性

無効な FREObject を Java API 呼び出しで使用すると、Java API から例外がスローされます。

FREObject インスタンスは、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。コールスタック上の最初の FREFunction 関数は、ActionScript 側で ExtensionContext インスタンスの call() メソッドが呼び出された結果として、ランタイムから呼び出された関数です。また、FREObject は、ランタイムによる最初の FREFunction 呼び出しに使用されたスレッド内でのみ有効です。

注意: FREFunction 関数は間接的に他の FREFunction 関数を呼び出すことができます。例えば、 FREFunctionA() は ActionScript オブジェクトのメソッドを呼び出すことができます。そのメソッドは次に FREFunctionB() を呼び出すことができます。

したがって、FREObject を使用するときは次の点を考慮する必要があります。

  • FREFunction インスタンスに渡された FREObject は、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。

  • Java 関数で作成された FREObject は、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。

  • FREObject を他のスレッドで使用することはできません。FREObject は、そのオブジェクトを受け取った、または作成した Java 関数のスレッドと同じスレッド内でのみ使用できます。

  • FREObject への参照をグローバルデータなどに保存しておいて、次回以降の FREFunction 関数呼び出し時に使用することはできません。コールスタック上の最初の FREFunction 関数が戻るとオブジェクトが無効になるので、保存した参照は使用不可になります。ただし、FREContext クラスの setActionScriptData() メソッドを使用すると、次回以降の関数呼び出し時までデータを保存しておくことができます。

  • FREObject が無効になった後も、それに対応する ActionScript オブジェクトは存続します。例えば、FREObject が FREFunction 関数の戻り値の場合、対応する ActionScript オブジェクトは参照されたままです。ただし、ActionScript 側でその参照が削除された場合は、ランタイムによって ActionScript オブジェクトが破棄されます。

  • 複数の拡張の間で FREObject を共有することはできません。

    注意: 1 つの拡張内では、複数の拡張コンテキスト間で FREObject を共有できます。ただし、この場合も他の場合と同じく、コールスタック上の最初の FREFunction 関数がランタイムに処理を戻すと FREObject は無効になります。