在这里,我已编码获取设备列表,我将检查每个设备状态
DocFlavor myFormat = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
PrintService[] services =PrintServiceLookup.lookupPrintServices(myFormat, aset);
System.out.println("The following printers are available");
for (int i=0;i<services.length;i++) {
PrintService printService = services[i];
PrintServiceAttributeSet printServiceAttributes = printService.getAttributes();
PrinterState printerState =
(PrinterState)printServiceAttributes.get(PrinterState.class);
if (printerState != null){
System.out.println(services[i].getName() + " is online");
} else {
System.out.println(services[i].getName() + " is offline");
}
}
但问题是每次我都获得“离线”状态,即使打印机已开启或关闭
答案 0 :(得分:1)
我最近遇到了从PrintService获取另一个属性的相同问题。
实际上,它总是返回null,因为该方法从未在Java类中实现过,而且很多属性都是如此。
如果您真的想获取这些信息,则必须使用Windows Print Spooler DLL,或者,如果您的打印机是网络打印机,则通过SNMP查询这些信息。