2015-06-29 3 views
0

Я хочу сделать паузу в течение примерно 10 минут после того, как будет напечатано 30 копий (буквально печать на принтере) и выполнить ее снова.Выполнение снова после выполнения задачи

public class printImage { 
    static public void main(String args[]) throws Exception { 
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
     pras.add(new Copies(30)); 

     PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras); 

     PrintService ps = pss[4]; 
     System.out.println("Printing to " + ps); 

     DocPrintJob job = ps.createPrintJob(); 

     FileInputStream fin = new FileInputStream("mypic.JPG"); 
     Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null); 

     job.print(doc, pras); 
     fin.close(); 
    } 
} 
+1

это java? то, пожалуйста, отметьте соответствующим образом –

+0

извините. просто новый здесь. отредактированный путем –

+0

, добавьте цикл и Thread.sleep (600000) в ваш код. – Zelldon

ответ

0

Кажется, что вам необходимо проверить интерфейс PrintJobListener.

Реализации этого интерфейса слушателя должны быть прикреплены к DocPrintJob для контроля состояния задания принтера. Эти методы обратного вызова могут быть вызваны в потоке, обрабатывающем задание на печать, или в созданном потоке уведомлений услуга . В любом случае клиент должен не выполнять длительную обработку в этих обратных вызовах.

Вы можете изменить свой код, как:

public static void main(String[] args) throws IOException, PrintException { 
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
     pras.add(new Copies(30)); 

     PrintService pss[] = (PrintService[]) PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras); 

     PrintService ps = pss[4]; 
     System.out.println("Printing to " + ps); 

     DocPrintJob job = pss[0].createPrintJob(); 

     FileInputStream fin = new FileInputStream("mypic.JPG"); 
     Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null); 

     // Monitor print job events 
     PrintJobWatcher pjDone = new PrintJobWatcher(job); 

     job.print(doc, pras); 

     // Wait for the print job to be done 
     pjDone.waitForDone(); 

     fin.close(); 

    } 

Класс PrintJobWatcher является:

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

Когда задание печати будет сделано, вы можете поместить вызов сна там, а не allDone метода.

Смежные вопросы