Printer API不会抛出异常

时间:2015-11-23 06:42:12

标签: java

我使用Java Printer API进行打印。我的打印机需要通过电线连接。因此,当未连接该电缆(到我的电脑)时,应抛出PrinterException。当我第一次运行程序时,抛出异常。但是第二次,异常没有被抛出,程序正常结束。重新启动操作系统后,首次运行会​​抛出异常。

我的想法是看起来打印机作业正在等待打印机连接。连接打印机时,会自动打印以前的数据。

我想知道每当打印机断开连接时我应该添加什么来抛出PrinterException。现在它只在第一次运行时抛出,我需要重新启动操作系统来测试行为。

这是我的代码:

 PrintService ps = PrinterService.getPrintService(
                printer.getValue());

         PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.PORTRAIT);
        aset.add(new JobName(" - Document", null));
        aset.add(MediaSizeName.ISO_DESIGNATED_LONG);

        DocPrintJob printjob = ps.createPrintJob();

        Doc doc = new SimpleDoc(new PrintableReceipt(mydata),
                DocFlavor.SERVICE_FORMATTED.PRINTABLE, null);
        try
        {
            printjob.print(doc, aset);
            Thread.sleep(2000);

        }
        catch (PrintException printerException)
        {
          //  printjob.removePrintJobListener(this);
            printStatus.put("printStatus", false);
            return addCORS(Response.serverError().entity(
                    JSON.encode(printStatus)).build());
        }

2 个答案:

答案 0 :(得分:0)

  

当没有连接电缆(到我的电脑)时,应该抛出PrinterException

这不是它在Javadoc中所说的内容。 做什么说的是:

  

当打印方法返回时,打印可能尚未完成,因为打印可能是异步发生的,可能是在不同的线程中。想要监控成功或失败的应用程序客户端应该注册PrintJobListener.

这样做。

答案 1 :(得分:0)

现在,据我所知,这是因为Java版本不同。当我们将Java版本从1.8.0_20更改为1.8.0_51时,就会发生这种情况。在早期版本中,我们可以设置为队列并可以捕获异常。但是在1.8.0_51,队列成为默认值,无法修改行为。