目次||

イベントの登録

Java印刷サービスAPIを使用すると、サービスは、プリンタのステータスの更新と印刷ジョブの進捗の更新という2種類のイベントをアプリケーションに報告できます。 イベントAPI (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

PrintJobAttributeListenerは、サービス属性リスナーに似ています: ジョブは、PrintJobAttributeインタフェースを実装する属性の変更を報告します。 通常、これらの属性は、印刷要求属性でもあり、印刷ジョブのライフタイム全体にわたって固定されます。 JobMediaSheetsCompletedなどのいくつかの属性のみが変更される可能性があります。 この詳細度の粒度に関心のあるクライアントはほとんどなく、この機能をサポートするサービスも少なくなるため、クライアントはPrintJobListenerを使用してジョブのプログレスを監視する可能性が最も高くなります。

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 } ... 


目次||

Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.