Drucken (Print) monitoren

internet

Top Contributor
Hallo zusammen,

ich habe mit einen JobMonitor für das Drucken erstellt.
Aber jedes Mal bekomme ich immer nur den Status: printJobNoMoreEvents
Also gehe in diese Methode, obwohl der Druckauftrag noch gar nicht fertig:
Was mache ich falsch?

Code:
        @Override
        public void printJobNoMoreEvents(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("printJobNoMoreEvents");
        }


Code:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

public class PrintTest {

    public static void main(String[] args) throws Exception {

        // Open the image file

        InputStream is = new BufferedInputStream(new FileInputStream(
                "test.pdf"));

        // create a PDF doc flavor

        DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

        // Locate the default print service for this environment.

        PrintService service = PrintServiceLookup.lookupDefaultPrintService();

        // Create and return a PrintJob capable of handling data from

        // any of the supported document flavors.

        DocPrintJob printJob = service.createPrintJob();

        // register a listener to get notified when the job is complete

        JobCompleteMonitor monitor = new JobCompleteMonitor();

        printJob.addPrintJobListener(monitor);

        // Construct a SimpleDoc with the specified

        // print data, doc flavor and doc attribute set.

        Doc doc = new SimpleDoc(is, flavor, null);

        // Print a document with the specified job attributes.

        printJob.print(doc, null);

        monitor.waitForJobCompletion();

        is.close();

    }

    private static class JobCompleteMonitor extends PrintJobAdapter {

        private boolean completed = false;

        @Override
        public void printJobCanceled(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("printDataTransferCanceld");
        }

        @Override
        public void printJobCompleted(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("printDataTransferComplete");
        }

        @Override
        public void printJobFailed(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("printDataTransferFailed");
        }

        @Override
        public void printJobNoMoreEvents(PrintJobEvent pje) {
            signalCompletion();
            System.out.println("printJobNoMoreEvents");
        }

        private void signalCompletion() {

            synchronized (JobCompleteMonitor.this) {

                completed = true;

                JobCompleteMonitor.this.notify();
                System.out.println("WOW 2");
            }

        }

        public synchronized void waitForJobCompletion() {

            try {

                while (!completed) {

                    wait();
                    System.out.println("WOW");
                }

            } catch (InterruptedException e) {

            }
        }

    }

}
 

Zurück
Oben