Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PrintJobEventListener未生成事件打印完成或打印失败_Java - Fatal编程技术网

Java PrintJobEventListener未生成事件打印完成或打印失败

Java PrintJobEventListener未生成事件打印完成或打印失败,java,Java,我正在使用打印服务的JavaAPI,它提供PrintJobEventListner来获取作业完成、打印进度、打印失败等事件。下面是我的代码片段。方法,该方法将获取要打印的pdf,获取PrintService的对象,并添加实现PrintJobEventListner的类“PrinterEventListner” public void createPrintJob() throws PrintException, IOException, Interru

我正在使用打印服务的JavaAPI,它提供PrintJobEventListner来获取作业完成、打印进度、打印失败等事件。下面是我的代码片段。方法,该方法将获取要打印的pdf,获取PrintService的对象,并添加实现PrintJobEventListner的类“PrinterEventListner”



    public void createPrintJob() throws PrintException, IOException,
                InterruptedException {
            DocFlavor psFlavor = DocFlavor.INPUT_STREAM.PDF;
            PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
            aset.add(new Copies(2));
            aset.add(MediaSizeName.ISO_A4);
            aset.add(Sides.TWO_SIDED_LONG_EDGE);
            aset.add(Finishings.STAPLE);
    PrintService pservices = PrintServiceLookup.lookupDefaultPrintService();
    DocPrintJob pj = pservices.createPrintJob();
            try {
                FileInputStream fis = new FileInputStream(
                        "/path/file.pdf");
    PrinterEventListner eventListner = new PrinterEventListner();
    Doc doc;
                pj.addPrintJobListener(eventListner);   
              doc = new SimpleDoc(fis, psFlavor, null);
    System.out.println("The printerName: " + pservices.getName());
                pj.print(doc, aset);
    } catch (IOException e) {

                System.err.println(e);
            } catch (PrintException e) {
                System.err.println(e);
            }
        }

这是我的PrinterEventListner类:



    public class PrinterEventListner implements PrintJobListener {
        boolean completed;
        public void printDataTransferCompleted(PrintJobEvent pje) {
            signalCompletion();    
            System.out.println("Printing on progress");
        }
        public void printJobCompleted(PrintJobEvent pje) {
                signalCompletion();
            System.out.println("Printing Completed");
        }
        public void printJobFailed(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("Printing Failed");
        }
        public void printJobCanceled(PrintJobEvent pje) {
           signalCompletion();
            System.out.println("Printing cancelled");
        }
        public void printJobNoMoreEvents(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("No more events on Printing");
        }
        public void printJobRequiresAttention(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("PrintJob Needs Attention");
        }
        private void signalCompletion() {
            synchronized (PrinterEventListner.this) {
                completed = true;
                PrinterEventListner.this.notifyAll();
            }
        }
        public synchronized void waitForJobCompletion() {
            try {
                while (!completed) {
                    wait();
                }
            } catch (InterruptedException e) {
            }


执行代码时,我仅获取printDataTransferCompleted()和printJobNoMoreEvents()的事件。printJobCompleted()/printJobFailed()似乎不起作用。我在许多不同的论坛上搜索了同一个问题,但没有找到解决方案。有人能帮我解决这个问题吗

同样的问题,只是printDataTransferCompleted()为我工作。