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?
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) {
}
}
}
}