从未调用javax.print PrintJobListener printJobCompleted或printJobFailed事件

从未调用javax.print PrintJobListener printJobCompleted或printJobFailed事件,java,printing,Java,Printing,我正在使用javax.print.PrintJobListener监视打印机作业状态,但无论打印成功与否,我都无法获得printJobCompleted或printJobFailed/printJobCanceled事件。 我总是得到printDataTransferCompleted和printJobNoMoreEvents事件,但我不知道文档是否真的打印出来了 有人建议在printJobNoMoreEvents事件上检查PrintService属性,查看打印队列是否为空,但它也不起作用,因为

我正在使用javax.print.PrintJobListener监视打印机作业状态,但无论打印成功与否,我都无法获得printJobCompleted或printJobFailed/printJobCanceled事件。 我总是得到printDataTransferCompleted和printJobNoMoreEvents事件,但我不知道文档是否真的打印出来了

有人建议在printJobNoMoreEvents事件上检查PrintService属性,查看打印队列是否为空,但它也不起作用,因为属性不会立即更新,所以即使打印成功,它也会说队列中有一个作业,如果打印失败也是如此

有没有这方面的经验?这是javax.print问题,还是特定的打印机问题?我正在使用从爱普生网站下载的linux驱动程序上的爱普生TM-T88V打印机。我在Mac OS X上也有同样的行为。

javax.print完全取决于系统的打印系统。在Linux和OS X上,javax.print的实现可能使用命令行工具与CUPS通信。另一方面,CUPS取决于特定打印机的驱动程序。详细的状态信息不可用或未由所涉及的众多组件之一转发,这并不罕见。简单的司机只是开火&忘记


如果打印机支持IPP,则可以从IPP作业对象中读取属性作业状态。这些可用的IPP实现可能会有所帮助:cups4j或jspi。

@beeger,你找到解决方案了吗?@Anand,不幸的是没有。即使在www.experts-exchange.com上,也没有人能提供解决方案。似乎它只是不适用于一些打印机型号。你能看看我的帖子,让我知道你是否也面临同样的情况吗?