例題(データI/O)
概要
このサンプルプログラムは、データストリームのインタフェースを用いたプログラム例です。
このプログラムは、KLICのプログラムにJavaによるGUIでデータを与えるプログラムとなっています。GUIでは、データの入力や表示をグラフィカルに行うことができるようになっています。
データストリームのインタフェースを用いて、JavaとKLICのプログラムを接続しています。このサンプルでは、KLICのプログラムは、単にデータストリームに送られたデータをそのまま返すプログラムとなっていますが、他のKLICプログラムにも利用可能です。KLIC側のプログラムのデータ入出力として、今回のデータストリームのインタフェースを利用すれば、このJavaのGUIが適用できるようになっています。
JavaのGUIは、単独のアプリケーションとして使用するだけでなく、アプレットとしてHTMLの中に貼りつけることも可能です。このことにより、WWWを介してKLICのアプリケーションが利用できるようにすることも出来ます。
コンパイル
他のサンプルプログラム同様に、jkディレクトリにあるソースとsampleディレクトリのファイルを利用するので、トップディレクトリで、makeしてください。これにより、このサンプルプログラムが利用できるようになります。
プログラムの本体は、sample/dataio/の下にありますので、プログラムの実行は、このディレクトリで行います。
ファイル説明
-
- dataio.html
- WWWで利用するための、アプレットを貼り付けてあるHTMLファイル。
-
- main.kl1
- KLIC側のプログラム。データストリームに送られたメッセージをそのまま返すプログラム。サーバープログラムとして動作する。
-
- DataIO.java
- Java側のメインプログラム。GUIを使いデータストリームにデータを作成し、送信する。KLIC側から受け取ったデータをGUIで表示する。クライアントプログラムとして動作する。
-
- KDI.java, KDICanvas.java, KDPropertyDialog.java, PropertyDialog.java, Node.java
- Java側でデータI/OのGUIを提供するためのプログラム。
-
- jkディレクトリにあるメッセージインタフェースのためのプログラム
- メッセージインタフェースの機能を提供する。
-
- sampleディレクトリにあるDoubleBufferedCanvas.java, MouseEventWrapper.java
- JavaでGUIを作成するために利用される。
実行方法
まず、KLIC側のサーバプログラムを起動します。
% ./echo &
として実行します。Java側のプログラムは、JDKのjavaで実行します。
% java DataIO
とすれば、Java側のプログラムが起動し、サンプルプログラムが利用できます。
Data Input Frameで送信するデータを作成して、Sendボタンを押します。データはKLIC側に送信されるとともに、メインウィンドウのHistoryにそのデータが表示されます。Java側がデータを受け取ると、Data Output Frame にそのデータが表示されます。また、同時にHistoryにもそのデータが表示されます。Historyで任意の行を選択すると、そのデータの図形的表現がData Input Frameに表示されます。KLIC側との接続を切断するには、メインウィンドウのdisconnectボタンを押してください。
Java側のプログラムは、アプレットとしても利用できます。アプレットとして利用する場合は、このプログラムがあるディレクトリをWWWサーバに登録します。そして、このディレクトリ中にあるdataio.htmlを開くと利用できます。このとき、KLIC側のプログラムは、WWWサーバと同じホストマシン上で既に動いている必要があります。
プログラムの説明
このプログラムは、KLICとJavaのプログラム間で、データストリームのインタフェースを利用してデータをやり取りするサンプルプログラムです。
KLIC側のプログラムは、サーバプログラムとして動作し、Java側から送られたデータをそのまま返す単純なプログラムとなっています。Java側のプログラムは、KLIC側のプログラムへのデータ入出力をGUIを用いて行うものとなっています。この2つのプログラムをソケットを用いて接続し、データストリームのインタフェースを利用してデータをやり取りしています。
このプログラムを利用することにより、KLICのプログラムにデータ入力を行うことが簡単に行え、インタラクティブにデータを入出力することが可能となります。KLIC側のプログラムは、サーバプログラムとして動き、データストリームのインタフェースを用いるようにしてあれば、どんなプログラムでも利用することが出来ます。
Java側のプログラムはアプレットとしても動作するようになっています。これにより、JDKがなくても、Javaが動作するWWWブラウザがあれば、どこでも利用することができます。
- JavaのGUI
- プログラムが実行されると、メインウィンドウのほかに、2つのウィンドウが開きます。1つは、"Data Input Frame"というタイトルが付いたもので、データを入力するためのウィンドウです。もう1つは、"Data Output Frame"というタイトルが付いていて、データを出力、表示するウィンドウです。

メインウィンドウは、上部に、接続操作を行うための "connect", "disconnect"ボタンがあります。中央には、これまでのデータ送受の履歴を表示する、ヒストリリストがあります。下部のテキストフィールドは、現在の状況を示すステータスバーです。

データ入力ウィンドウでは、KLIC側に送るデータを作成します。キャンバス上でデータを作成し、上部にある"Send"ボタンを押すことによりデータが送られます。キャンバス上では、図形的表現を利用してデータを入力します。このフレームでの操作の仕方を以下に示します。
-
- データの作成
- キャンバス上で、右ボタンをプレスするとポップアップメニューが表示されます。"new" の中にある "atom", "integer", "string" を用いてプリミティブデータを作成します。
ファンクタを作成するには、まず、主ファンクタ名を表すアトムを作成し、そのアトムに引数のデータをドラッグ&ドロップすることにより、そのアトムがファンクタになります。ファンクタの主ファンクタ部分にさらにデータをドラッグ&ドロップすると、そのファンクタの引数にデータを追加することができます。また、ファンクタ構造の出力で、コンスセルの表示のみ、別のレイアウトで表示されるので注意して下さい。
-
- データの変更、内容確認
- そのデータ上で右ボタンをプレスしてポップアップメニューを開き、"property"を選択してください。また、データをダブルクリックしても同様の動作をします。Property Dialogが開き、データを参照、変更することが出来ます。
-
- データの削除
- 削除したいデータの上で右ボタンをプレスして、ポップアップメニューを開き、"delete"を選択してください。ファンクタデータの場合は、一番親となるファンクタ構造の主ファンクタ部分で行います。
-
- ファンクタの引数の変更
- その引数上で右ボタンをプレスしてポップアップメニューを出し、"remove"を選択します。これにより、引数がそのファンクタから取り除かれます。
-
- データの選択
- データをクリックするとデータが選択されます。このとき、データの枠の色が黄色に変わります。また、指定したデータの文字列表現が、"send" ボタンの下のテキストフィールド上に示されます。ファンクタの場合は、主ファンクタを選択します。
-
- データの送信
- まず、送信するデータを選択します。そして、"Send"ボタンを押すことによりデータが送信されます。KLIC側と接続していないと、"Send"ボタンは押せません。
-
- データのコピー
- データを選択された状態で、データがないキャンバス上でダブルクリックすると、現在選択されているデータがコピーされます。

メインウインドウでは、基本的にKLIC側から送られたデータを表示しています。ただし、アプレットのメイン画面にあるヒストリリストからデータを選択すると、そのデータを表示させることができます。なお、出力ウィンドウでは、データを変更することが出来ませんので注意してください。