目次 | 前の項目 | 次の項目 JavaTM 印刷サービス API ユーザガイド


イベントの登録

Java 印刷サービス API では、2 種類のイベント (プリンタの状態の更新および印刷オブジェクトの進捗の更新) を、印刷サービスからアプリケーションに報告することができます。イベント API には、javax.print.event package パッケージと、印刷サービスおよび DocPrintJob にリスナーを登録するメソッドが組み込まれています。イベント API は、AWT 内で使用されているリスナーモデルに準拠しています。


印刷サービスのイベント

印刷サービスのイベントリスナーは、サービスの状態の変化を監視して、印刷サービス属性の値が変化したイベントを報告します。アプリケーションでは、印刷サービスのイベントを監視するために、javax.print.event.PrintServiceAttributeListener インタフェースを実装し、PrintService に対してアプリケーション自体をリスナーとしてインストールします。例を示します。

public class PrintPS implements PrintServiceAttributeListener {
	...
	pservices[0].addPrintServiceAttributeListener(this);
	...
	public void attributeUpdate(PrintServiceAttributeEvent e){
		// Do something if an attribute is updated
	}
...
PrintServiceAttributeListener.attributeUpdate() メソッドは、印刷サービス属性が変化したときに呼び出されます。印刷サービスは、PrintServiceAttributeListener インタフェースを使用して、サポートするイベントを判断します。

アプリケーションでは、サービスがサポートする印刷サービス属性を検出するときに、サービスがサポートする要求属性を検出するときに使用する照会メソッドを使用します。たとえば、特定のサービスが QueuedJobCount 属性をサポートしているかどうかを調べるには、アプリケーションから次のメソッドを呼び出します。

service.isAttributeCategorySupported(QueuedJobCount.class);
サービスには、属性の更新を報告する頻度を設定します。サービスによってサポートされる属性が多い場合は、イベントが一括されることがあります。この場合、アプリケーションが特定のイベントを受け取れないことがあります。配信されたイベントは、値が変化した属性だけで構成されます。つまり、プリンタモデルなどの static サービス属性は、イベントには報告されません。


印刷ジョブのイベント

印刷を行っているクライアントでは、ほとんどの場合、サービスの状態ではなく、印刷ジョブを監視します。クライアントの DocPrintJob には、PrintJobAttributeListener および PrintJobListener と呼ばれる 2 つのリスナーをインストールできます。


PrintJobAttributeListener

PrintJobAttributeListener は、サービス属性のリスナーと似ています。印刷ジョブは、PrintJobAttribute インタフェースを実装する属性が変化したときに報告します。通常、これらの属性は、印刷要求属性でもあり、印刷ジョブのライフタイムをまたがって固定されます。JobMediaSheetsCompleted など、ごく一部の属性だけが変化します。属性の変化を詳細に監視するクライアントは、ほとんどありません。また、この機能をサポートするサービスはほとんどありません。ほとんどのクライアントでは、PrintJobListener はジョブの進捗の監視に使用されます。


PrintJobListener

PrintJobListener は、PrintJobAttributeListener よりも簡単に使用できます。配信するメッセージが、printJobCompleted や printJobFailed のように単純です。このインタフェ−スには、6 個のメソッドだけが組み込まれています。これらのメソッドは、重要で単純な情報をイベントとして報告します。アダプタクラスの PrintJobAdapter には、これらの 6 個のメソッドがデフォルトで実装されています。

特に、printJobNoMoreEvents は、発行頻度は高くありませんが、役に立つメッセージです。クライアントでは、多くの場合、ジョブの終了または失敗を把握する必要があります。可能な場合は、サービスはこのような「終了」イベントを配信する必要があります。ただし、ジョブの終了または失敗をサービスが判断できない場合は、「完了」メッセージによって誤った処理が実行されることがあります。たとえば、可視キューが存在しないネットワーク印刷サービスに対して、ジョブがスプールされることがあります。この場合、「no more events」メッセージが配信されても、ジョブが正常終了したと確実に判断することはできません。しかし、クライアントは、ジョブの失敗は通知されていないと判断することはできます。次の例では、printJobNoMoreEvents メッセージを監視するリスナーを追加しています。

public class PrintPS extends PrintJobAdapter{
	...
	pj.addPrintJobListener(this);
	...
	public void printJobNoMoreEvents(PrintJobEvent e){
		// Do something here
	}
...


目次 | 前の項目 | 次の項目
Copyright © 2001 Sun Microsystems, Inc. All Rights Reserved.