2015-12-21 4 views
6

Ich brauche mehr Kontrolle über meinen Drucker und dann versuche ich PrinterState meines Druckers zu bekommen und dann PrintStareReasons zu verwenden. Mein Code ist wie folgt zusammen:Warum ist PrinterState immer null?

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; 
} 

Googeln ich auch getAttributes schreiben() alle attribures zu bekommen, aber PrinterState ist nicht vorhanden.

Dies ist die Liste aller Attribute:

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 

Während

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

Rückkehr immer:

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

ich den folgenden Code auf Linux getestet und unter Windows (7), aber keiner von ihnen gibt den tatsächlichen Status zurück. Was könnte das Problem sein? Der Drucker, der Treiber oder mein Code?

+1

Dupliziert. Check this up: http://stackoverflow.com/questions/26985422/why-printerstate-alvers-returns-null Ich würde sagen, stört nicht zu viel, um den Staat zu bekommen, es scheint, es ist nicht richtig implementiert – delephin

+0

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

Antwort

6

isAttributeCategorySupported() gibt true zurück, wenn der Druckdienst supports specifying a doc-level or job-level attribute in category in einer Druckanforderung andernfalls false zurückgibt.

Blick auf the official oracle documentation wird meinen Punkt viel klarer machen

+0

Dann haben Sie mir gesagt, dass mein Druckdienst diese Art von Attribut nicht unterstützt? Und dann bekomme ich diese Attribute nie? – Skizzo