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