Sorry for delay in answering, but here i am :)
So after some modifications, i've tried to build a Queue like you said, managed by a Thread waiting for the previous file to be printer, but the problem is that the printer NEVER send me back that the job is finiched / failed / cancelled.
I've searched all around the web and no way to find an answer to this problem.
I also tried to switch printer (never knows...) and the result is the same, the only events sent back are DATA_TRANSFER_COMPLETE and NO_MORE_EVENTS...
Thanks previously.
btw, here the code i am actually running :
PrintService
package print;
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;
public class MyPrintService extends Thread {
String name;
public MyPrintService(String name)
{
super(name);
this.name = name;
System.out.println("MyPrintService("+this.name+")");
this.start();
}
public void print()
{
System.out.println("print()");
try {
for (int i = 1; i < 3; i++) {
// Open the image file
InputStream is = new BufferedInputStream(new FileInputStream("D://giulio.provasi//Desktop//"+i+".txt"));
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
// Create the print job
DocPrintJob job = service.createPrintJob();
Doc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
// Monitor print job events
PrintJobWatcher pjDone = new PrintJobWatcher();
job.addPrintJobListener(pjDone);
// Print it
job.print(doc, null);
// Wait for the print job to be done
pjDone.waitForDone();
while(i < 10000000) {
System.out.println("le thread n'a pas attendu !");
i++;
}
// It is now safe to close the input stream
is.close();
}
} catch (Exception e) {
}
}
@Override
public void run()
{
System.out.println("run( "+this.name+" )");
this.print();
}
}
Print Listener
package print;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;
public class PrintJobWatcher implements PrintJobListener {
Boolean done = false;
Integer status = 0;
PrintJobWatcher()
{
System.out.println("PrintJobWatcher()");
}
@Override
public void printDataTransferCompleted(PrintJobEvent pje)
{
this.done(PrintJobEvent.DATA_TRANSFER_COMPLETE);
System.out.println("DATA_TRANSFER_COMPLETE");
}
@Override
public void printJobCompleted(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_COMPLETE);
System.out.println("JOB_COMPLETE");
}
@Override
public void printJobFailed(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_FAILED);
System.out.println("JOB_FAILED");
}
@Override
public void printJobCanceled(PrintJobEvent pje)
{
this.done(PrintJobEvent.JOB_CANCELED);
System.out.println("JOB_CANCELED");
}
@Override
public void printJobNoMoreEvents(PrintJobEvent pje)
{
this.done(PrintJobEvent.NO_MORE_EVENTS);
System.out.println("NO_MORE_EVENTS");
}
@Override
public void printJobRequiresAttention(PrintJobEvent pje)
{
this.done(PrintJobEvent.REQUIRES_ATTENTION);
System.out.println("REQUIRES_ATTENTION");
}
private synchronized void done(Integer status)
{
System.out.println("DONE !");
this.status = status;
this.done = true;
notifyAll();
}
synchronized void waitForDone()
throws InterruptedException
{
System.out.println("AVANT : IMPRESSION EN COURS...");
try {
while (!this.done || ((this.status != PrintJobEvent.JOB_COMPLETE) || (this.status != PrintJobEvent.JOB_FAILED))) {
System.out.println("IMPRESSION EN COURS...");
wait();
}
} catch (InterruptedException e) {}
}
}
Launcher
import print.MyPrintService;
public class Main {
public static void main(String[] args)
{
System.out.println("C'est parti !");
MyPrintService test1 = new MyPrintService("1");
}
}