1

クライアント マシンでプリンターのリストを検索し、Doc を印刷するための微粒子プリンターを設定するコードを書いています。しかし、私はネットでゴグリングしていて、次のように考えるコードを見つけました:

package org.ui;
import java.io.FileInputStream;
import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class Printing {
    public static void main (String [] args) {       
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet ();       
        PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset);
        try {
            int printer = getPrinter(pservices);
            if(printer == -1) {
                throw new Exception("No network printer found");
            }
            DocPrintJob pj = pservices[0].createPrintJob();
            FileInputStream fis = new FileInputStream ("c:///file.txt");
            Doc doc = new SimpleDoc (fis, flavor, null);
            pj.print (doc, aset);
        }
        catch (Exception ex) {
            ex.printStackTrace ();
        } 
    }
    private static int getPrinter(PrintService[] pservices) {
        int printer = -1;
        for(int i = 0; i<pservices.length; i++) {
            if(pservices[i].getName().contains("\\\\")) {
                System.out.println("network printer: " + pservices[i].toString());   
                printer = i;
                break;
            }        
        }
        return printer;
    }
}

しかし、私は紙に印刷することができません.誰かがこのコードの問題を教えてもらえますか? そのデスクトップ アプリケーションです。

4

1 に答える 1

1

のドキュメントによると、print()

[...] print メソッドが戻ったとき、おそらく別のスレッドで非同期に印刷が行われる可能性があるため、印刷はまだ完了していない可能性があります。成功または失敗を監視するアプリケーション クライアントは、PrintJobListener を登録する必要があります。

これはPrintJobListener、問題が何であるかを知るために a を登録する必要があることを意味します:

試す:

pj.addPrintJobListener(new PrintJobListener() {
  @Override
  void printDataTransferCompleted(PrintJobEvent pje) {
    System.out.println("Transfer completed");
  }
  @Override
  void printJobCanceled(PrintJobEvent pje) {
    System.out.println("Cancelled");
  }
  @Override
  void printJobCompleted(PrintJobEvent pje) {
    System.out.println("Completed");
  }
  @Override
  void printJobFailed(PrintJobEvent pje) {
    System.out.println("Failed");
  }
  @Override
  void printJobNoMoreEvents(PrintJobEvent pje) {
    System.out.println("No more events");
  }
  @Override
  void printJobRequiresAttention(PrintJobEvent pje) {
    System.out.println("Check printer");
  }
});

呼び出す前print()に、コンソールに何が出力されるかを確認してください

于 2012-06-13T13:23:35.583 に答える