2015-12-21 21 views
6

私は自分のプリンタについてより多くの制御を必要とし、次にプリンタのPrinterStateを取得してから、PrintStareReasonsを使用しようとしています。なぜPrinterStateは常に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; 
} 

私もすべてattriburesを取得するのgetAttributes()を書くが、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)); 

中:私はLinux上およびWindows上で次のコードをテストしている

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

(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

関連する問題