% java JKServer &として起動します。次に、KLIC側のサーバプログラムを起動します。
% ./queen &として実行します。最後にJava側のクライアントプログラムを実行します。
% java Queenとすれば、Java側のプログラムが起動し、サンプルプログラムが利用できます。
jkE -Stream +Sock -InspectorMain -InspectorSpool -InspectorInputのようになっており、StreamとSockはjk:jk/2と同じですが、InspectorMain, InspectorSpool, InspectorInputには、main, spool, inputのインタフェース内部の3つのプロセスの内部状態を通知するデータが返されます。InspectorMain, InspectorSpool, InspectorInputに設定されるメッセージは、jkinspector:inspector/2に設定するストリームの形式となっています。
inspector +InspectorList +JK_Streamの形をしています。InspectorListにjk:jkEで取得したInspectorMain, InspectorSpool, InspectorInputのうちのいずれか、または複数をリストにして指定します。また、JK_Streamには、監視しているメッセージインタフェースとは別のメッセージインタフェースへのストリームを渡します。例を示すと、
test(NSock1, NSock2) :-のようになります。ここで、auto_closeというメッセージをメッセージインタフェースに渡しているのは、監視しているメッセージインタフェースが終了したときに、自動的にインスペクタのためのインタフェースを終了するためです。
NSock1 = normal(Sock1), NSock2 = normal(Sock2) |
jk:jkE(JKS1, Sock1, IM, IS, II),
jk:jk(JKS2, Sock2),
JKS2 = [auto_close | Inspector],
jkinspector:inspector([IM, IS, II], Inspector),
mainProcess(JKS1).
InspectorListに渡すデータは、
new +InspectorName -InspectorStreamというデータです。InspectorNameは、監視している対象の名前を識別します。これは、JavaのGUIで識別名として利用されます。InspectorStreamには、以下のデータをストリームで渡します。
例えば次のようになります。
process(Inspector) :-
Inspecotor = new("A process", Stream),
Stream = [write("This is a test."), nl, put(f(abc,123), nl].
public Inspector(String name)です。nameにはInspectorオブジェクトを識別する名前を指定します。内部状態の表示は、KLIC側からのメソッド呼び出しで行われます。実際に利用されているのは、
の2つです。改行は、insertString("\n")で行われています。