2015-12-21 85 views
6

我需要对我的打印机有更多的控制权,然后我试图获得我的打印机的PrinterState,然后使用PrintStareReasons。我的代码如下:为什么PrinterState始终为空?

public void checkPrinterStatus(){ 

    try { 
     logger.info("Check -------------- "); 

     Thread.sleep(2000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    PrintService printer = configParamPrintService.getPrintService(); 
    logger.info("State " + printer.isAttributeCategorySupported(PrinterState.class)); 
    Set<Attribute> attributes = getAttributes(printer); 
    for(Attribute attr : attributes){ 
     logger.info(attr.getName()); 
    } 



} 

public static Set<Attribute> getAttributes(PrintService printer) { 
    Set<Attribute> set = new LinkedHashSet<Attribute>(); 

    //get the supported docflavors, categories and attributes 
    Class<? extends Attribute>[] categories = (Class<? extends Attribute>[]) printer.getSupportedAttributeCategories(); 
    DocFlavor[] flavors = printer.getSupportedDocFlavors(); 
    AttributeSet attributes = printer.getAttributes(); 

    //get all the avaliable attributes 
    for (Class<? extends Attribute> category : categories) { 
     for (DocFlavor flavor : flavors) { 
      //get the value 
      Object value = printer.getSupportedAttributeValues(category, flavor, attributes); 

      //check if it's something 
      if (value != null) { 
       //if it's a SINGLE attribute... 
       if (value instanceof Attribute) 
        set.add((Attribute) value); //...then add it 

       //if it's a SET of attributes... 
       else if (value instanceof Attribute[]) 
        set.addAll(Arrays.asList((Attribute[]) value)); //...then add its childs 
      } 
     } 
    } 

    return set; 
} 

谷歌搜索我也写的getAttributes()来获取所有attribures但PrinterState不存在。

这是所有属性的列表:

21.12.2015 16:48:56 INFO PrintWorker:142 - Check -------------- 
21.12.2015 16:48:58 INFO PrintWorker:151 - State false 
21.12.2015 16:48:58 INFO PrintWorker:154 - copies-supported 
21.12.2015 16:48:58 INFO PrintWorker:154 - finishings 
21.12.2015 16:48:58 INFO PrintWorker:154 - job-sheets 
21.12.2015 16:48:58 INFO PrintWorker:154 - job-sheets 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 
21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 
21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 
21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 
21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 
21.12.2015 16:48:58 INFO PrintWorker:154 - page-ranges 
21.12.2015 16:48:58 INFO PrintWorker:154 - media 
21.12.2015 16:48:58 INFO PrintWorker:154 - spool-data-destination 

虽然

logger.info("State " + printer.isAttributeCategorySupported(PrinterState.class)); 

回报总是:

21.12.2015 16:48:58 INFO PrintWorker:151 - State false 

我已经测试了下面的代码在Linux和Windows(7 ),但没有一个返回实际状态。可能是什么问题呢?打印机,驱动程序还是我的代码?

+1

重复。检查了这一点:http://stackoverflow.com/questions/26985422/why-printerstate-always-returns-null 我会说,不要打扰太多,以获得状态,它似乎没有正确实施 – delephin

+0

相关: http://stackoverflow.com/questions/5567709/extended-printer-information-in-java – Jayan

回答

6

isAttributeCategorySupported()返回true如果打印请求中的打印服务supports specifying a doc-level or job-level attribute in category否则返回false。

看一看the official oracle documentation会让我的观点更清晰

+0

然后你告诉我,我的打印服务不支持这种属性?然后我永远不会获得这些属性? – Skizzo