Java examples for 2D Graphics:Print
Determining When a Print Job Has Finished
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.print.Doc; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.SimpleDoc; import javax.print.event.PrintJobAdapter; import javax.print.event.PrintJobEvent; public class Main { public static void main(String[] argv) { try {/*from w w w .j a v a 2s . c o m*/ // Open the image file InputStream is = new BufferedInputStream(new FileInputStream( "filename.gif")); // Create the print job PrintService service = null; DocPrintJob job = service.createPrintJob(); Doc doc = new SimpleDoc(is, null, null); // Monitor print job events PrintJobWatcher pjDone = new PrintJobWatcher(job); // Print it job.print(doc, null); // Wait for the print job to be done pjDone.waitForDone(); // It is now safe to close the input stream is.close(); } catch (PrintException e) { } catch (IOException e) { } } } class PrintJobWatcher { // true iff it is safe to close the print job's input stream boolean done = false; PrintJobWatcher(DocPrintJob job) { // Add a listener to the print job job.addPrintJobListener(new PrintJobAdapter() { public void printJobCanceled(PrintJobEvent pje) { allDone(); } public void printJobCompleted(PrintJobEvent pje) { allDone(); } public void printJobFailed(PrintJobEvent pje) { allDone(); } public void printJobNoMoreEvents(PrintJobEvent pje) { allDone(); } void allDone() { synchronized (PrintJobWatcher.this) { done = true; PrintJobWatcher.this.notify(); } } }); } public synchronized void waitForDone() { try { while (!done) { wait(); } } catch (InterruptedException e) { } } }