2010-09-10 27 views
3

好,我有一個程序是:的Java - 檢查,如果文件在打印隊列/在使用

  1. 創建基於一個 用戶輸入
  2. 打印文件(可選)
  3. 臨時文件刪除文件(可選)

我的問題坐鎮階段之間2 & 3,我需要等待文件完成打印,直到我可以將其刪除。

FYI:印刷將需要5-10分鐘(大文件到後臺一臺舊電腦上)

所以我需要從Java能夠檢查:

  • 的defualt打印隊列爲空

  • 的文件正在使用中(注:File.canWrite()打印時返回true)

回答

5

您是否檢查過Java Print API?從http://download.oracle.com/javase/1.4.2/docs/api/javax/print/event/PrintJobListener.html

公共接口

PrintJobListener這個監聽 接口

實現應該被附加到 DocPrintJob的監測 打印機的工作狀態。

我想你可以提交一個打印作業,然後通過它來監視它的狀態。

還有一個相當完整的例子在 exampledepot.com/egs/javax.print/WaitForDone.html: :URL似乎有所改變,並指出潛在的惡意軟件)

try { 
    // Open the image file 
    InputStream is = new BufferedInputStream(
     new FileInputStream("filename.gif")); 
    // Create the print job 
    DocPrintJob job = service.createPrintJob(); 
    Doc doc = new SimpleDoc(is, flavor, 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) { 
     } 
    } 
} 
+0

感謝我在此基礎上和它似乎工作構建解決方案,將鏈接到代碼時,它不。 exampledepot非常有用 – Gwilym 2010-09-18 19:57:27