javax.print.event
パッケージとサービス上のリスナーを登録するメソッドおよびDocPrintJob
を含む)は、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)
.
DocPrintJob
に2種類のリスナーをインストールできます: PrintJobAttributeListener
およびPrintJobListener
。PrintJobAttributeListener
は、サービス属性リスナーに似ています: ジョブは、PrintJobAttribute
インタフェースを実装する属性の変更を報告します。 通常、これらの属性は、印刷要求属性でもあり、印刷ジョブのライフタイム全体にわたって固定されます。 JobMediaSheetsCompleted
などのいくつかの属性のみが変更される可能性があります。 この詳細度の粒度に関心のあるクライアントはほとんどなく、この機能をサポートするサービスも少なくなるため、クライアントはPrintJobListener
を使用してジョブのプログレスを監視する可能性が最も高くなります。PrintJobListener
is easier to use than PrintJobAttributeListener
because it delivers simple messages, such as printJobCompleted
or printJobFailed
. このインタフェースには、6個のメソッドだけが組み込まれています。これらのメソッドは、重要で単純な情報をイベントとして報告します。 便宜上、アダプタ・クラスPrintJobAdapter
は、これらの6つのメソッドのデフォルト実装を提供します。
特に1つのメッセージ: printJobNoMoreEvents
は異常ですが有用です。 クライアントでは、多くの場合、ジョブの終了または失敗を把握する必要があります。 可能な場合は、サービスはこのような「終了」イベントを配信する必要があります。ただし、ジョブの終了または失敗をサービスが判断できない場合は、「完了」メッセージによって誤った処理が実行されることがあります。 たとえば、あるジョブが、表示されないキューを持つネットワーク印刷サービスにスプールされることがあります。 この場合、「no more events」というメッセージではジョブが成功したことを示すのに十分ではありませんが、クライアントは少なくとも失敗したことがわかっているわけではないことを推測できます。 次の例は、printJobNoMoreEvents
メッセージをモニターするリスナーの追加を示しています:
public class PrintPS extends PrintJobAdapter{ ... pj.addPrintJobListener(this); ... public void printJobNoMoreEvents(PrintJobEvent e){ // Do something here } ...