目次||

イベントの登録

Java印刷サービスAPIを使用すると、サービスは、プリンタのステータスの更新と印刷ジョブの進捗の更新という2種類のイベントをアプリケーションに報告できます。javax.print.eventパッケージと、サービスおよび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);
サービスは、属性に関する更新を報告する頻度を決定します。多くの属性がサポートされている場合は、サービスによってイベントが一括処理されることがあります。つまり、アプリケーションは特定のイベントの受信を保証されません。配信されたイベントには、値が変更された属性のみが含まれています。つまり、プリンタ・モデルなどの静的なサービス属性がイベントで報告されることはありません。

印刷ジョブのイベント

ほとんどの印刷クライアントは、サービスのステータスのモニタリングではなく、印刷ジョブのモニタリングの方により関心があります。クライアントは、DocPrintJobにPrintJobAttributeListenerとPrintJobListenerという2種類のリスナーをインストールできます。

PrintJobAttributeListener

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

PrintJobListener

PrintJobListenerは、printJobCompletedやprintJobFailedなどの単純なメッセージを配信するため、PrintJobAttributeListenerより使い方が簡単です。このインタフェースには、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 © 1993, 2020, Oracle and/or its affiliates. All rights reserved.