如何在Windows中解决有关PrintServiceLookup.lookupPrintService()的问题

时间:2009-09-16 13:51:50

标签: java printing

以下是我在Linux上运行时的代码,检测到我的打印机并打印出来。但是当我在Windows上运行它时,它没有检测到我的打印机。

printbutton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            DocFlavor docflavor = DocFlavor.INPUT_STREAM.TEXT_PLAIN_UTF_8;

            PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet();

            attr_set.add(new Copies(1));

            PrintService[] service = PrintServiceLookup.lookupPrintServices(null, null);

             if (service.length==0) {
                    JOptionPane.showMessageDialog(null, "No Printer Selected");
                }

            else if (service.length > 0) {
                System.out.println("Selected printer is " + service[0].getName());

                    DocPrintJob pj = service[0].createPrintJob();
                    {
                        PrintService ps = pj.getPrintService();
                        FileInputStream fis = null;
                        try {
                            File file = new File("c:\\NewFile.txt");
                            fis = new FileInputStream(file);
                            Doc doc = new SimpleDoc(fis, docflavor, null);
                            pj.print(doc, attr_set);
                        } catch (PrintException ex) {
                            Logger.getLogger(PrintButtonView.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (FileNotFoundException ex) {
                            Logger.getLogger(PrintButtonView.class.getName()).log(Level.SEVERE, null, ex);
                        } finally {
                            try {
                                fis.close();
                            } catch (IOException ex) {
                                Logger.getLogger(PrintButtonView.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }
                }
            }
    });

}

1 个答案:

答案 0 :(得分:0)

您是否安装了安全管理器以及正确的权限?来自doc

  

PrintServiceLookup实现者是   建议检查一下   SecurityManager.checkPrintJobAccess()   拒绝访问不受信任的代码。   遵循此建议政策   表示不受信任的代码可能不是   能够找到任何打印服务。   下载的applet是最常见的   不受信任的代码示例。

     

此检查是针对每次查找进行的   服务基础,以允许灵活性   反映需求的政策   不同的查询服务。

     

注册的服务   registerService(PrintService)不会   如果a,请包含在查找结果中   已安装安全管理器及其   checkPrintJobAccess()方法否认   访问。