javaLib.invoke() システム関数は、EGL Java™ オブジェクト・スペース内のローカル Java オブジェクトまたはクラスのメソッドを呼び出し、値を戻すことができます。
javaLib.invoke() および類似する関数が実行される、EGL Java オブジェクト・スペースについて詳しくは、『EGL プリミティブ型の Java へのマッピング』を参照してください。 EGL は、この Java アクセスのメソッドを以前のバージョンとの互換性のために保守します。新規コードの場合は、より強力な ExternalType 構文を使用してください。詳しくは、『ExternalType パーツ』を参照してください。
javaLib.invoke(
identifierOrClass javaObjIdOrClass in,
method STRING in
{, argument anyEglPrimitive in})
returns (result anyJavaPrimitive)
オブジェクト ID を作成するまでは、オブジェクト上のメソッドをコードで呼び出すことはできません。後述の例では、PrintStream オブジェクトを参照する java.lang.System.out を使用して、この点を説明します。
STRING 型との代入互換性のある任意の変数または式を入力できます。 ストリングの先頭と最後から、1 バイトのブランクと 2 バイトのブランクが削除されます。
Java の型変換の規則が適用されます。 キャストが必要になる場合があります。『EGL プリミティブ型の Java へのマッピング』を参照してください。精度が失われるのを避けるために、 Java の double には EGL の FLOAT 変数を使用し、 Java の float には EGL の SMALLFLOAT 変数を使用してください。 それ以外の EGL の型を使用すると、丸め誤差が生じる場合があります。
SharedResourcePowerServer srps = JavaLib.getSharedResourcePowerServer();
JavaLib.invoke("anObject" as "objID:java", "aMethod", srps);
呼び出し側プログラムのメモリー領域は、メソッドの実行内容にかかわらず、変更されません。
ローカル Java メソッドが値を戻す場合、結果フィールドはオプションです。
次のことが該当します。
長さが一致しない場合については、『代入』を参照してください。
// Java の Date クラスのコンストラクターを呼び出し、
// 識別子「date」に新規オブジェクトを割り当てます
javaLib.storeNew("date" as "objID:java", "java.util.Date");
// 新規の Date オブジェクトの toString メソッドを呼び出します
// 出力 (今日の日付) を charVar に代入します
charVar = javaLib.invoke("date" as "objID:java", "toString" );
// Java System クラスの標準出力ストリームを
// ID "systemOut" に割り当てます
javaLib.storeField("systemOut" as "objID:java", "java.lang.System", "out" );
// 出力の println メソッドを呼び出します
// 今日の日付を出力します
javaLib.invoke("systemOut" as "objID:java", "println", charVar );
「java.lang.System.out」を前の行の第 1 引数として使用することは無効です。
この引数は、既にオブジェクト・スペースに存在する識別子、あるいはクラス名のいずれかである必要があるためです。この引数は static フィールドを参照できません。v60ExceptionCompatibility プログラム・プロパティーが設定されていないか、NO に設定されている場合、例外が発生すると、EGL は JavaObjectException をスローします。 その他のエラーが発生した場合は、EGL によって RuntimeException がスローされます。
v60ExceptionCompatibility プログラム・プロパティーが YES に設定されている場合、javaLib.invoke() の処理中にエラーが発生すると、sysVar.errorCode は次の表の値に設定されます。
| sysVar.errorCode の値 | 説明 |
|---|---|
| 00001000 | 呼び出されたメソッドによって、またはクラスの初期化の結果として、例外がスローされました。 |
| 00001001 | オブジェクトが NULL でした。または指定された ID がオブジェクト・スペース内にありませんでした。 |
| 00001002 | 指定された名前の public メソッド、フィールド、またはクラスが存在しないか、ロードできません。 |
| 00001003 | EGL プリミティブ型が、Java で想定される型と一致しません。 |
| 00001004 | メソッドが NULL を戻したか、メソッドが値を戻さないか、またはフィールドの値が NULL でした。 |
| 00001005 | 戻り値が、戻り変数の型と一致しません。 |
| 00001006 | NULL へキャストする引数のクラスをロードできませんでした。 |
| 00001007 | メソッドまたはフィールドに関する情報の取得中に、SecurityException または IllegalAccessException がスローされました。または、final 宣言されたフィールドの値を設定しようとしました。 |
| 00001009 | クラス名ではなく、ID を指定する必要があります。メソッドまたはフィールドが静的ではありません。 |