JExternal
dv4.1J
JExternalとは、4DからJavaメソッドを実行するためのプラグインです。Javaで書かれたいろいろな分野の豊富なライブラリーを4Dから利用することができます。
JarファイルをJavaClassesフォルダに入れておくと、その中にあるJavaメソッドを4Dから呼び出し、実行することができます。実行中のJavaメソッドが、4Dメソッドを呼び出すコールバック機能もあります。JExternalバージョン4.1.1以降では、Javaメソッドは、4Dプロセスに対応したそれぞれのネイティブスレッドの中で動作します。複数のJavaメソッドの並列処理が可能です。
JExternalは、Mac OS、Windows両プラットフォーム上のv6.06以降の4th Dimention、4D Serverで動作します。
ただし、v2004以前の4Dで使用する場合、インテルプロセッサーが搭載されたMacでは動作しません。これは、JExternalがRosetta上では動作できないからです。インテルプロセッサーが搭載されたMacでは、バージョン4.1.1以降のJExternalを4D v11以降で使用する必要があります。
Windowsでは、Sun Microsystems社のJavaバーチャルマシンが必要です。
1
JavaClassesフォルダの拡張子.jarファイルは、自動的にJavaクラスパスに登録され、その中の Javaメソッドは、4Dから実行可能な状態になります。JavaClassesフォルダは、次のフォルダに配置することができます。
- パッケージ(JExternal_4xx.bundle)のContentsフォルダ
- ストラクチャファイルがあるフォルダ
- アプリケーションファイル(4th Dimension, 4D Server, 4D Client)があるフォルダ
- 4Dフォルダ(ACIフォルダ)
上記の順番で、JavaClassesフォルダは探索され、最初に見つかったJavaClassesフォルダのみが採用されます。
2
JExternalは、クラスメソッドとインスタンスメソッドの両方を実行することができます。
3
JExternalによって4Dから実行されたJavaメソッドの中から、4Dメソッドを実行するコールバック機能があります。
4
4Dの機能を拡張するという観点から、JExternalによって実行されるJavaメソッドを、従来のプラグインのように考えることができます。一度Javaメソッドを作成すれば、原則としてそれはそのままMacでもWindowでも全く同様に動作します。従来のプラグインのように、プラットホームごとにプラグインを用意する必要はありません。
5
JExternalは、Javaバーチャルマシンを起動するプラグインJWroldと一緒に使用する必要があります。
6
プラグインJExternalおよびJWroldは、Plugins(またはMac4DX/Win4DX)フォルダ内にあるプラグインファイル以外に、Java関連のファイル(JExternal_xxx.jar、JWorld_xxx.jar、java.securiy、 libJWorld.jnilib)を必要とします。これらのファイルは、RonriKoboフォルダ内になければなりません。RonriKoboフォル ダは、次のフォルダに配置することができます。
- パッケージ(JWorld_4xx.bundle)のContentsフォルダ
- ストラクチャファイルがあるフォルダ
- アプリケーションファイル(4th Dimension, 4D Server, 4D Client)があるフォルダ
- 4Dフォルダ(ACIフォルダ)
上記の順番で、RonriKoboフォルダは探索され、最初に見つかったRonriKoboフォルダのみが採用されます。
7
RonrIKoboフォルダ内のJExternal_xxx.jarとJWorld_xxx.jarは、4Dから実行されるJavaメソッドを開発するための、クラスライブラリでもあります。
8
JExternal ver 4.1.1以降では、JExternalにより実行されるJavaメソッドは、それぞれの4Dプロセスに対応するネイティブスレッドで実行され、複数のJavaメソッドの並列処理が可能です。
JEX Call class method ( ClassName; MethodName; Params ) -->
Status [ C_LONGINT ]
パラメタ
タイプ
説明
ClassName
C_STRING
Javaクラス名
MethodName
C_STRING
クラスメソッド名
Params
ARRAY POINTER
Javaメソッドへ渡すパラメタへのポインタが要素となっているポインタ配列
JEX Call class methodは、ClassNameで指定されるクラスのMethodNameで 指定されるクラスメソッドを実行します。
Paramsには、Javaメソッドへ渡すパラメタへのポインタが、要素となっているポインタ配列を指定してくださ い。Javaメソッドの実行後、Javaメソッドが返す値を、このポインタ配列の要素として受け取ることができます。この結果、このポインタ配列の要素 は、Javaメソッドの実行の前後で変化します。また、その配列のサイズも変化する可能性があります。
このメソッドは、実行が成功すると0を返します。エラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
` TestClass1クラスの中のTestMethod1クラスメソッドを4Dから呼ぶ場合のコード |
` TestClass1クラスの中のTestMethod2クラスメソッドを4Dから呼ぶ場合のコード |
` TestClass1クラスの中のTestMethod3クラスメソッドを4Dから呼ぶ場合のコード |
//Java TestClass1 Class |
JEX Call object method ( ObjectID; MethodName; Params ) --> Status [ C_LONGINT ]
パラメタ
タイプ
説明
ObjectID
C_LONGINT
Javaオブジェクトを識別するためのID番号
MethodName
C_STRING
インスタンスメソッド名
Params
ARRAY POINTER
Javaメソッドへ渡すパラメタへのポインタが要素となっているポインタ配列
JEX Call object methodは、ObjectIDで識別されるJavaオブジェク トの、MethodNameで指定されるインスタンス(オブジェクト)メソッドを実行します。
ObjectIDには、4DがJavaオブジェクトを識別するためのID番号(正の整数)を指定してください。ObjectIDを どのように獲得するかは、下記のサンプルコードを参照してください。
Paramsには、Javaメソッドへ渡すパラメタへのポインタが、要素となっているポインタ配列を指定してくださ い。Javaメソッドの実行後、そのJavaメソッドが返す値を、このポインタ配列の要素として受け取ることができます。この結果、このポインタ配列の要 素は、Javaメソッドの実行の前後で変化します。また、その配列のサイズも変化する可能性があります。
このメソッドは、実行が成功すると0を返します。エラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
` TestClass2クラスの中のTestMethodインスタンスメソッドを4Dから呼ぶ場合のコード |
//Java Class |
JEX Free object ( ObjectID ) --> Status [ C_LONGINT ]
パラメタ
タイプ
説明
ObjectID
C_LONGINT
Javaオブジェクトを識別するためのID番号
JEX Free objectは、ObjectIDで識別されるJavaオブジェクトを、もう4D では使用しないことを宣言します。Javaオブジェクトを4Dから使用する必要がなくなったときに、このプラグインメソッドを実行してください。このプラ グインメソッド実行後、ガベージコレクションによりそのオブジェクトは、メモリから消去される可能性があります。
このメソッドは、実行が成功すると0を返します。エラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
C_LONGINT($TargetObjetID) `Javaオブジェクトの識別番号 |
JEX
Set environment ( JVM_ID; License )
--> Status [ C_LONGINT ]
パラメタ
タイプ
説明
JVM_ID
C_LONGINT
JWD create java worldが返すJavaバーチャルマシンのID番号
License
C_STRING
デモ版と製品版を区別するための文字列
JEX Set environmentは、JExtetnalが動作するための基本的環境を整えます。このプラグ インメソッドをエラーなく実行しない限り、他のJExtetnalのプラグインメソッドは、すべてエラー(エラー番号-18021)になります。通常この メソッドは、 On Startupで実行します。
JVM_IDには、JWD create java worldが返し たJavaバーチャルマシンの識別番号を指定してください。
Licenseには、"PRODUCT"または"TRIAL"のどちらかの文字列を指定してください。
"PRODUCT"を指定すると、次回の4Dの起動からライセンスキーコードを入力する画面が表示されます。"TRIAL"を指定 すると、試用時間が60分に制限されたデモ版として動作します。
このメソッドは、実行が成功すると0を返します。エラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
`通常 On Startupで、次のように記述する |
JWorldは、Javaバーチャルマシンを起動するためのプラグインであり、JExternalにとって必須のものです。 JWorldには、次のようなプラグインメソッドがあります。
- JWD Create java world
- JWD Close java world
- JWD Convert line separator
- JWD Set JVM options (JWorld version 4.1.1 以降)
Mac OS Xでは、Javaバーチャルマシンはシステムにビルトインされています。
Windowsでは、サンマイクロシステムズ社のJ2SE(Java2 Platform Standard Edition)を使用します。サンマイクロシステムズ社のWebサイトから、最新版のJ2SEを入手してインストールしてください。J2SEには、 JREとJDKの2種類ありますが、どちらも使用できます。
Javaバーチャルマシンを起動する機能は、他のプラグインJbyJでも同様に必要なため、そのプラグインと共有できるように、JExternalの中に含めずJWorldとして独立しています。
パラメタ
タイプ
説明
JVM_Path
C_STRING
JavaバーチャルマシンDLLへのパス(Windows)
JWD Create java worldは、Javaバーチャルマシン(JVM)を起動し、そのJavaバー チャルマシンの識別番号(正の整数)を返します。
JVM_PathとしてWindowsでは、"jvm.dll"までのフルパス名、またはそのフルパス名を設定して いる環境変数を指定してください。ブランク("")が指定された場合は、環境変数「JVMDLL_PATH」が指定されたものと見なされます。
JWorldバージョン3.1.0以降では、JVM_Pathにブランク("")が指定され、しかも環境変数 「JVMDLL_PATH」が存在しない場合、Javaバーチャルマシンのインストール時に設定されたレジストリを参照します。最初に、 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime EnvironmentにあるCurrentVersionキーからJavaバーチャルマシンの現在のバージョンを取得し、次に HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\(現在のバージョン)にあるRuntimeLibキーからjvm.dllのパスを取得します。
"jvm.dll"までのフルパス名の例
JRE 1.6.0_02
"C:\Program Files\Java\jre1.6.0_02\bin\client\jvm.dll"
JDK 1.6.0_02
"C:\Program Files\Java\jdk1.6.0_02\jre\bin\client\jvm.dll"
Mac OSでは、JVM_Pathは無視され、現在コンピュータにインストールされているアップル社のJava バーチャルマシンが起動さ れます。
Javaバーチャルマシンが正しくインストールされていれば、WindowsとMac OS共通で、ブランク("")がJVM_Pathとして指定できます。
このプラグインメソッドは、4th Dimensionまたは4D Clientでは、通常、On Startupで使用します。4D Serverでは、On Server Startupから起動される別プロセスで使用してください。
4D Clientで使用する場合は、このプラグインメソッドを呼ぶ前に、4D Server上にあるJavaClassesフォルダやRonriKoboフォルダを、4D Clientにコピーしておきます。4D Clientでの利用を参照して ください。
このメソッドでエラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
サンプルコード
`4Dまたは4D Clientの場合の On Startup |
`4D Serverの場合の On Server Startup |
`On Server Startupとは別プロセスで実行される"SETUP_JEXTERNAL" |
JWD
Close java world --> Status [ C_LONGINT ]
パラメタ
タイプ
説明
なし
JWD Close java worldは、4D ServerのOn Server Shutdownで実行し、正常に4D Serverを終了させるためのプラグインメソッドです。4D Serverでこのメソッドを実行せずに終了した場合は、終了までに余分な時間がかかる場合があります。
4th Dimensionまたは4D Clientでは、必ずしもOn Exitでこのメソッドを実行する必要はありません(実行しても問題ありません)。
このメソッドでエラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
`On Server Shutdown |
JWD
Convert line separator ( ON_or_OFF )
--> Status [ C_LONGINT ]
パラメタ
タイプ
説明
ON_or_OFF
C_BOOLEAN
行区切りコードの変換のオン/オフを指定する
JWD Convert line separatorに、引数としてTRUEを指定すると、4DからJavaに文 字列が渡されるとき、自動的に4Dの行区切りコードCRをJavaの行区切りコードLFに変換します。また、Javaから4Dに戻される文字列の中に Javaの行区切りコードLFがあれば、自動的に4Dの行区切りコードCRに変換します。
このメソッドに、引数としてFALSEを指定すると、上記の変換は行われません。JWorldプラグイン起動直後は、このメソッド にFALSEを指定した状態になっています。
このメソッドでエラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
C_LONGINT($Err) |
JWD
Set JVM options ( Options )
--> Status [ C_LONGINT ] JWorld ver 4.1.1以降で有効
パラメタ
タイプ
説明
Options
ARRAY TEXT
JVM起動オプションを要素とする配列
JWD Set JVM optionsは、Javaバーチャルマシンの起動オプションを設定するために使用します。起動オプションを要素とした配列を引数として指定してください。JWD Set JVM optionsは、JWD Create java worldを実行する前に呼び出してください。
このプラグインメソッドは、JWorld ver 4.1.1以降で使用できます。リソースにJavaバーチャルマシンの起動オプションを設定する方法も引き続き有効です。両者を併用できます。
このメソッドでエラーが発生した場合は、エラー番号(負の整数)を返します。エラー番号を参照してください。
C_LONGINT($Err) C_LONGINT($JVM_ID) |
RonriKoboフォルダにあるJExternal_xxx.jarとJWorld_xxx.jarは、4Dから実行する Javaメソッドを作成するためのクラスライブラリでもあります。
これらのクラスライブラリを利用して、4D独自のタイプのパラメタをJavaメソッドに渡したり、コールバック機能(Javaメソッ ドから4Dメソッドを実行すること)を持つJavaメソッドを作成することができます。
ライブラリには、次ぎようなクラスがあります。
(JExternal_xxx.jar)
(JWorld_xxx.jar)
(JWorld_xxx.jar)
(JWorld_xxx.jar)
(JWorld_xxx.jar)
(JExternal_xxx.jar)
(JExternal_xxx.jar)
(JExternal_xxx.jar)
クラス com.ronri_kobo.JExternal.DBWorld
java.lang.Object
|
+----com.ronri_kobo.JExternal.DBWorld
public class DBWorld extends java.lang.Object
このクラスは、コールバック機能を利用するときや4D上でJavaオブジェクトを識別するためのIDを獲得するときに利用されるメ ソッドを提供しています。
public DBWorld(int processNo)
throws com.ronri_kobo.JExternal.InvalidProcessNoException
このメソッドは、DBWorldクラスのコンストラクタで、DBWorldクラスのオブジェクトの生成と初期化を行います。
processNoには、4Dへのコールバックが行われたときに、その4Dメソッドが実行されるプロセス番号を指定 してください。
public static synchronized int createObjectID(java.lang.Object obj)
このメソッドは、objで指定されるJavaオブジェクトのオブジェクトIDを返します。4Dはこのオブジェクト IDを使用して、JEX Call object methodを 実行します。JEX Free objectが 実行されるまで、このオブジェクトはガベージコレクションされることはありません。
public static synchronized void alert(java.lang.String message)
このメソッドは、4DのALERTコマンドのように、アラートウィンドウにパラメタで指定されたメッセージを表示します。このメ ソッドは、Javaのデバッグもに使用されます。
public java.lang.Object call4DMethod(java.lang.String methodName, java.lang.Object parameter[])
throws com.ronri_kobo.JExternal.InvalidMethodNameException, com.ronri_kobo.JExternal.InvalidParametersException
このメソッドは、methodNameで指定される4Dメソッドを実行(コールバック)します。4Dメソッドは、コ ンストラクタDBWorldでオブジェ クトを生成するときに指定したプロセスで実行されます。
プラグインメ ソッドJEX Call class methodまたはJEX Call object methodは、Javaメソッドの実行終了を待つ間、Javaからのコールバックを常に監視しており、コールバックメソッドは、これらのプラグインメ ソッドによって呼び出されます。
parameter[]には、コールバックメソッドに渡すパラメタを要素としたObjectクラスの配列を指定して ください。int型やdouble型などのプリミティブ型のパラメタを渡す場合は、それらのラッパ−オブジェクトを作成してから、配列の要素としてくださ い。
このメソッドは、返り値として4Dの$0に対応した1つのObjectクラスのオブジェクトを返します。必要に応じて、そのオブ ジェクトをキャストあるいはアンラップして、返り値を獲得してください。
コールバックメソッドで複数の値を返したい場合は、それらの値へのポインタを要素とするポインタ配列へのポインタを返してくださ い。Javaでは、返されたObjectクラスのオブジェクトを、まずObjectクラスの配列にキャストし、その配列の要素を必要に応じて、アンラップ またはキャストすることで、4Dからの複数の返り値を取り出すことができます。
弊社Webサイトからダウンロードできるデモ「JEX_SimpleDemo_xxx」を参照してください。
関連項目:4DとJavaの型変換
` TestClassクラスの中のTestMethodインスタンスメソッドを4Dから呼ぶ場合のコード |
//Java Class |
`コールバックされる4Dメソッド QueryAge |
java.lang.Object
|
+----com.ronri_kobo.Time
public class Time extends java.lang.Object implements java.io.Serializable
このクラスは、4DのTIME型に対応するJavaクラスです。
コンストラクタ Time
public Time(int hour, int min, int sec)
このメソッドは、Timeクラスのコンストラクタで、Timeクラスのオブジェクトを生成し、パラメタで指定された値(時間 (0-23)、分 (0-59)、秒 (0-59))でそのオブジェクトを初期化します。
インスタンスメソッド getHours
public int getHours()
このメソッドは、Timeクラスのオブジェクトの「時間」を返します。
インスタンスメソッド getMinutes
public int getMinutes()
このメソッドは、Timeクラスのオブジェクトの「分」を返します。
インスタンスメソッド getSeconds
public int getSeconds()
このメソッドは、Timeクラスのオブジェクトの「秒」を返します。
インスタンスメソッド setHours
public void setHours(int hour)
このメソッドは、Timeクラスのオブジェクトに「時間」をセットします。
インスタンスメソッド setMinutes
public void setMinutes(int min)
このメソッドは、Timeクラスのオブジェクトに「分」をセットします。
インスタンスメソッド setSeconds
public void setSeconds(int sec)
このメソッドは、Timeクラスのオブジェクトに「秒」をセットします。
java.lang.Object
|
+----com.ronri_kobo.Date
public class Date extends java.lang.Object implements java.io.Serializable
このクラスは、4DのDATE型に対応するJavaクラスです。
コンストラクタ Date
public Date(int year, int month, int date)
このメソッドは、Dateクラスのコンストラクタで、Dateクラスのオブジェクトを生成し、パラメタで指定された値(年(0- 32767)、月(1-12)、日 (1-31))でそのオブジェクトを初期化します。
インスタンスメソッド getYear
public int getYear()
このメソッドは、Dateクラスのオブジェクトの「年」を返します。
インスタンスメソッド getMonth
public int getMonth()
このメソッドは、Dateクラスのオブジェクトの「月」を返します。
インスタンスメソッド getDate
public int getDate()
このメソッドは、Dateクラスのオブジェクトの「月」を返します。
インスタンスメソッド setYear
public void setYear(int year)
このメソッドは、Dateクラスのオブジェクトに「年」をセットします。
インスタンスメソッド setMonth
public void setMonth(int month)
このメソッドは、Dateクラスのオブジェクトに「月」をセットします。
インスタンスメソッド setDate
public void setDate(int date)
このメソッドは、Dateクラスのオブジェクトに「日」をセットします。
java.lang.Object
|
+----com.ronri_kobo.String255
public class String255 extends java.lang.Object implements java.io.Serializable
このクラスは、4DのSTRING型に対応するJavaクラスです。
コンストラクタ String255
public String255(java.lang.String str)
このメソッドは、String255クラスのコンストラクタで、String255クラスのオブジェクトを生成し、パラメタで指定 された文字列でそのオブジェクトを初期化します。指定された文字列が255バイトを超えた場合は、255バイトにカットします。
インスタンスメソッド getString
public java.lang.String getString()
このメソッドは、現在のString255クラスのオブジェクトをStringクラスのオブジェクトに変換して、それを返します。
インスタンスメソッド setString
public void setString(java.lang.St
このメソッドは、指定されたバイト配列をString255クラスのオブジェクトに変換して、それを現在のString255クラ スのオブジェクトと入れ替えます。
java.lang.Object
|
+----com.ronri_kobo.Picture
public class Picture extends java.lang.Object implements java.io.Serializable
このクラスは、4DのPICTURE型に対応するJavaクラスです。
コンストラクタ Picture
public Picture(byte picture[])
このメソッドは、Pictureクラスのコンストラクタで、Pictureクラスのオブジェクトを生成し、パラメタで指定されたバ イト配列でそのオブジェクトを初期化します。
インスタンスメソッド getBytes
public byte[] getBytes()
このメソッドは、現在のPictureクラスのオブジェクトをバイト配列に変換して、それを返します。
インスタンスメソッド setBytes
public void setBytes(byte picture[])
このメソッドは、 指定されたバイト配列をPicture クラスのオブジェクトに変 換して、それを現在のPicture クラスのオブジェクトと入れ替えます。
クラ
ス com.ronri_kobo.JExternal.InvalidProcessNoException
java.lang.Object
|
+----java.lang.Throwable
|
+----java.lang.Exception
|
+----com.ronri_kobo.JExternal.InvalidProcessNoException
public class InvalidProcessNoException extends java.lang.Exception
この例外は、DBWorldクラスのコンストラクタDBWorldにおいて、不正な4Dプロセス番号を指定したときに発生します。
コンストラクタ InvalidProcessNoException
public InvalidProcessNoException()
ク
ラス com.ronri_kobo.JExternal.InvalidMethodNameException
java.lang.Object
|
+----java.lang.Throwable
|
+----java.lang.Exception
|
+----com.ronri_kobo.JExternal.InvalidMethodNameException
public class InvalidMethodNameException extends java.lang.Exception
この例外は、DBWorldクラスのインスタンスメソッドcall4DMethodにおいて、不正な4Dメソッド名を指定したときに発生します。
コンストラクタ InvalidMethodNameException
public InvalidMethodNameException()
ク
ラス com.ronri_kobo.JExternal.InvalidParametersException
java.lang.Object
|
+----java.lang.Throwable
|
+----java.lang.Exception
|
+----com.ronri_kobo.JExternal.InvalidParametersException
public class InvalidParametersException extends java.lang.Exception
この例外は、DBWorldクラスのインスタンスメソッドcall4DMethodにおいて、4Dメソッドへの不正なパラメタを指定したときに発生 します。
コンストラクタ InvalidParametersException
public InvalidParametersException()
Javaバーチャ
ルマシンの起動オプション
JWorldバージョン3.1.0以降では、JWorldのリソースSTR#を編集することにより、Javaバーチャルマシンの起動オプションを設定することができます。
Mac OS Xの起動オプションは、15903番のSTR#を編集します。デフォルトで
-Djava.awt.headless=trueというオプションが設定されています。
Windowsの起動オプションは、15904番のSTR#を編集します。デフォルトで
#-Djworld.stdout.redirect=trueというオプションが設定されています。行の最初の文字が「#」であれば、その行のオプショ ンは無効です。有効にするためには、「#」を取り除いてください。起動オプションは、15903番または15904番のSTR#のインデックス1から10 まで最大10個設定することができます。
(注意1)
Mac OS 8/9ではJavaバーチャルマシンの起動オプションを設定することはできません。起動オプションが有効になるのは、Mac OS XとWindowsです。
(注意2)
(注意3)
起動オプションを設定することにより、Javaで使用するメモリ領域の初期値(-Xmsオプション)や最大値(-Xmxオプション)等を変更することがで きます。
参照:
Java HotSpot VM Options (Sun Microsystems)
Java Virtual Machine Options (Apple)
リソースを編集するためには、Macintosh上でResEditを使用します。Macintoshでリソースを編集後、4D TransporterでWindows用のリソースファイルを作成します。直接Windowsのリソースファイルを編集するツールもあります。
http://www.orchardsoft.com/news_links/4Dapps/resource_editor.htm(注意4)
Mac OS Xで起動オプション-Djava.awt.headless=trueを設定せずに、Javaバーチャルマシンを起動すると、java.awtパッケージ のAPIがコールされた段階で4Dはクラッシュあるいはフリーズします。この起動オプションは、build 1.4.1_01-69.1以降のJavaバーチャルマシンで有効になります。Mac OS Xでは、必ずこのオプションを設定してJavaバーチャルマシンを起動してください。(注意5)
Windowsでは、標準出力のためのコンソールが存在しないので、標準出力をリダイレクトしない限り、System.out.println()等の結果を確認することはできません。標準出力をリダイレクトするためには、-Djworld.stdout.redirect=trueというオプションを設定してJavaバーチャルマシンを起動してください。そうすることにより、System.out.println()等の結果は、ストラクチャファイルが あるフォルダの「jworldout.txt」というテキストファイルに出力されるようになります。(注意6)
JWorldバージョン4.1.1以降では、プラグインメソッドJWD Set JVM optionsでもJavaバーチャルマシンの起動オプションを設定することができます。両者を併用できます。
4D
Clientでの利用
JExternalバージョン4.0.1以降を使用する場合は、「4D Clientでの利用」の記述を無視してください。4D 2004から採用された新しいプラグインアーキテクチャーでは、JExternal_4xx.bundleの中のContentsフォルダ内のすべてのファイル/フォルダは、自動的に4D Clientにダウンロードされます。ContentsフォルダにRonriKoboフォルダとJavaClassesフォルダを配置すれば、自分で4D Clientにダウンロードする必要はありません。
JExternalを4D Clientで使用する場合、他のプラグイン同様、Mac4DXあるいはWin4DXフォルダ内のプラグインファイルは、4D Serverからクライアントに自動的にコピーされるのですが、RonriKoboフォルダとJavaClassesフォルダ内のファイルは、自動的にコピーされません。したがって、これらのファイルを手作業でクライアントにコピーするか、JExternalのデモで行っているように、サーバからクライア ントにファイルをコピーするためのメソッドを用意しなければなりません。コピーは、JWD Create java worldが実行される前に行われていなければなりません。したがって、通常、On Startupで行います。
- バージョン3.1.0のデモでは、下記のメソッドがRonriKoboフォル ダとJavaClassesフォルダ内のファイルをサーバからクライアントにコピーするために使用されています。参考にしてください。
- U_DOWNLOADFILES --- JAVA_SetupJExternalから呼ばれています
- SP_GETFILELIST --- ストアドプロシージャ
- SP_DOWNLOADFILE --- ストアドプロシージャ
- 4D Clientでは、RonriKoboフォルダとJavaClassesフォルダは、次のフォルダに配置します。
- 4Dフォルダ内のストラクチャファイルと同名のフォルダ(4D Client 6.7以降)
- アプリケーションファイル(4D Client)があるフォルダ
- 4Dフォルダ(ACIフォルダ)
上記の順番で、RonriKoboフォルダとJavaClassesフォルダは探索され、最初に見つかったもののみが採用されま す。
なお、1. は、バージョン6.7以降の4D Clientが自動的作成するフォルダです。バージョン6.0/6.5では、このフォルダは作成されませ ん。バージョン6.0/6.5では、RonriKoboフォルダまたはJavaClassesフォルダを2. または3. のフォルダに配置してください。
4DからJavaメソッドに渡すパラメタは、自動的に下記の変換(->)が行 われて、Javaメソッドに渡たされます。Javaメソッドが返す値も、自動的に変換(<-)が行われて、4Dに返えされます。
コールバックの場合、Javaから4Dメソッドに渡すパラメタは、自動的に変換 (<-)が行われて、4Dメソッドに渡たされます。4Dメソッドが返す値も、自動的に変換(->)が行われて、Javaに返えされます。
4D
Java
C_BOOLEAN
<->
boolean
C_INTEGER
->
int
C_LONGINT
<->
int
C_REAL
<->
double
C_TIME
<->
com.ronri_kobo.Time
C_DATE
<->
com.ronri_kobo.Date
C_STRING
<->
com.ronri_kobo.String255
C_TEXT
<->
java.lang.String
C_PICTURE
<->
com.ronri_kobo.Picture
C_BLOB
<->
byte[]
ARRAY BOOLEAN
<->
boolean[]
ARRAY INTEGER
<->
short[]
ARRAY LONGINT
<->
int[]
ARRAY REAL
<->
double[]
ARRAY DATE
<->
com.ronri_kobo.Date[]
ARRAY STRING
<->
com.ronri_kobo.String255[]
ARRAY TEXT
<->
java.lang.String[]
ARRAY PICTURE
<->
com.ronri_kobo.Picture[]
-15901
Javaセッションをオープンできない
-15902
4Dのバージョンが古すぎる
-15903
68K Macintoshを使用している
-15904
Mac OSのバージョンが古すぎる
-15905
MRJのバージョンが古すぎる
-15906
JWorld_xxx.jarが見つからない
-15920
まだJavaセッションがオープンされていない
-15922
JWorldのための基本Javaクラスが見つからない
-15923
JWorldのための基本Javaメソッドが見つからない
-15924
libJWorld.jnilibが見つからない
-15925
Securityポリシーファイルが見つからない
-15926
クラスパス設定時にエラーが発生した
-15927
クラスパス設定のためのメモリが確保できない
-15928
JavaVMの起動に失敗した
-15929
JavaDLLにJavaVMの起動のためのメソッドが見つからない
-15930 jvm.dllが見つからない -15931 JavaVMが古すぎる。Windowsでは、JDK1.2以上が必要。
-17002
不正なクラス名が指定された
-17003
不正なメソッド名が指定された
-17005
指定されたパラメタ配列がポインタ配列ではない
-17301
Javaメソッド実行中エラーが発生した
-17302
Javaオブジェクトを特定できない
-18000
デモ版で60分以上使用している
-18007
JExternal_xxx.jarが見つからない
-18010
JExternalのための基本Javaクラスが見つからない
-18011
JEternalのための基本Javaメソッド が見つからない
-18012
不正なJVM IDが指定された
-18021
JEX Set environmentの前に他のプラグインメソッドを実行している
-18022
Javaメソッドへ不正なパラメタが指定された
-18023
必要なメモリが確保できない-1
-18024
必要なメモリが確保できない-2
-18025
必要なメモリが確保できない-3
-18029
不正な戻り値を受け取った
1
Javaメソッドから受け取ることができる戻り値の数は、最大99です。
2
コールバックで4Dへ渡すことができるパラメタの数は、最大99です。
3
4DとJavaの間で2次元配列の受け渡しはできません。
4
コールバックされた4Dメソッドの中で、再びJavaメソッドをコールすることはできません。
5
Javaメソッドでは、ウィンドウを含むいかなるユーザインタフェースコンポーネントも使用することはできません。
6
プラグインファイルJWorld_xxx.4DXのファイル名を変更することはできません。