//得到默认打印服务
PrintService se = PrintServiceLookup.lookupDefaultPrintService();
//得到打印服务列表
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
//打印数据类型
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//显示打印对话框
PrintService select = ServiceUI.printDialog(null,200,200,services,se,flavor,attrs);
//打印作业
DocPrintJob job = select.createPrintJob();
job.addPrintJobListener(new myPrintJob());
String str = "donbingdonbingdonbingdonbingdonbing";
ByteArrayInputStream os = new ByteArrayInputStream(str.getBytes());
DocAttributeSet das = new HashDocAttributeSet();
SimpleDoc doc = new SimpleDoc(os, flavor,null);
job.print(doc,attrs);以上的打印程序最后如何确定打印完成呢?总是没有完全打印结束就退出程序了.
class myPrintJob extends PrintJobAdapter {
   public void printJobCompleted(PrintJobEvent pje) {
      System.out.println("打印结束");
      System.exit(0);
   }
}
注册了以上的监听器,但此方法好像从没有被调用过.
DocPrintJob的print方法如何监听知道打印结束,现在打印不完.
String str = "donbingdonbingdonbingdonbingdonbing";
打印出来的最多只有donbing前面一段.
请问监听器应该如何写?

解决方案 »

  1.   

    自己顶一下.
    用Thread.sleep(1000)停一下即能打的比较完全.
      

  2.   

    本以为是
    ByteArrayInputStream os = new ByteArrayInputStream(str.getBytes());
    我最后没有调用os.close()关系,可是文档上说close()是无效的.
    没人能回答一下吗?
      

  3.   

    我试了一下楼主的程序(我是在 JDK1.5 里运行的),有两个现象跟楼主描述的不太一样:1. job.print(doc,attrs); 的运行是 block 的,直到打印任务从“打印机任务列表”的列表中消失后,这一句才返回,所以要不要 sleep() 其实是无所谓的;2. myPrintJob 是能接收到事件通知的。我重写了 PrintJobAdapter 中的所有方法,发现截获到两个事件:printDataTransferCompleted 和 printJobNoMoreEvents。