目次 | 前へ | 次へ

イベントの登録

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 は特に、一般的ではありませんが、役立つメッセージの 1 つです。クライアントでは、多くの場合、ジョブの終了または失敗を把握する必要があります。可能な場合は、サービスはこのような「終了」イベントを配信する必要があります。ただし、ジョブの終了または失敗をサービスが判断できない場合は、「完了」メッセージによって誤った処理が実行されることがあります。たとえば、あるジョブが、表示されないキューを持つネットワーク印刷サービスにスプールされることがあります。この場合、「no more events」というメッセージではジョブが成功したことを示すのに十分ではありませんが、クライアントは少なくとも失敗したことが知られているわけではないことを推測できます。次の例では、printJobNoMoreEvents メッセージを監視するリスナーを追加しています。

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


目次 | 前へ | 次へ

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