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);サービスは、属性に関する更新を報告する頻度を決定します。多くの属性がサポートされている場合は、サービスによってイベントが一括処理されることがあります。つまり、アプリケーションは特定のイベントの受信を保証されません。配信されたイベントには、値が変更された属性のみが含まれています。つまり、プリンタ・モデルなどの静的なサービス属性がイベントで報告されることはありません。
特にprintJobNoMoreEventsは、一般的ではありませんが、役立つメッセージです。クライアントでは、多くの場合、ジョブの終了または失敗を把握する必要があります。可能な場合は、サービスはこのような「終了」イベントを配信する必要があります。ただし、ジョブの終了または失敗をサービスが判断できない場合は、「完了」メッセージによって誤った処理が実行されることがあります。たとえば、あるジョブが、表示されないキューを持つネットワーク印刷サービスにスプールされることがあります。この場合、「no more events」というメッセージではジョブが成功したことを示すのに十分ではありませんが、クライアントは少なくとも失敗したことがわかっているわけではないことを推測できます。次の例では、printJobNoMoreEventsメッセージをモニターするリスナーを追加しています。
public class PrintPS extends PrintJobAdapter{ ... pj.addPrintJobListener(this); ... public void printJobNoMoreEvents(PrintJobEvent e){ // Do something here } ...