我正在尝试在对话框中显示打印机位置。但令我吃惊的是,打印服务似乎没有位置属性 – 尽管我已经确认我的某些打印机在Windows打印机控制面板中显示了一个位置。
我使用这个代码打印位置(它总是打印“null”的位置)。我的Java版本是1.7.0_21:
public class PrintLocation {
public static void main(String[] argv) {
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (PrintService service : services) {
Object location = service.getAttribute(PrinterLocation.class);
System.out.println(service.getName() + " - " + location);
}
}
}
这是不是由JRE支持/实现,还是我在这里做错了?
如何获取打印机的位置?
编辑:我机器上的输出是:
\\srv51\SIR-2725-01_KX_color - null
\\srv51\SIR-2725-01_KX_sw - null
Microsoft XPS Document Writer - null
Microsoft Office Document Image Writer - null
FreePDF XP - null
EDIT2:正如我所建议的,我打印出所有的属性:
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (PrintService service : services) {
PrintServiceAttributeSet attrs = service.getAttributes();
System.out.println("Service: " + service.getName());
int i = 1;
for (Object attr : attrs.toArray()) {
System.out.println("Attr #" + i + ": " + attr.getClass().getSimpleName()
+ ", " + attr);
++i;
}
}
我得到了
Service: \\srv51\SIR-2725-01_KX_color
Attr #1: ColorSupported, supported
Attr #2: PrinterName, \\srv51\SIR-2725-01_KX_color
Attr #3: QueuedJobCount, 0
Attr #4: PrinterIsAcceptingJobs, accepting-jobs
Service: \\srv51\SIR-2725-01_KX_sw
Attr #1: ColorSupported, supported
Attr #2: PrinterName, \\srv51\SIR-2725-01_KX_sw
Attr #3: QueuedJobCount, 0
Attr #4: PrinterIsAcceptingJobs, accepting-jobs
Service: Microsoft XPS Document Writer
Attr #1: ColorSupported, supported
Attr #2: PrinterName, Microsoft XPS Document Writer
Attr #3: QueuedJobCount, 0
Attr #4: PrinterIsAcceptingJobs, accepting-jobs
Service: Microsoft Office Document Image Writer
Attr #1: ColorSupported, not-supported
Attr #2: PrinterName, Microsoft Office Document Image Writer
Attr #3: QueuedJobCount, 0
Attr #4: PrinterIsAcceptingJobs, accepting-jobs
Service: FreePDF XP
Attr #1: ColorSupported, supported
Attr #2: PrinterName, FreePDF XP
Attr #3: QueuedJobCount, 0
Attr #4: PrinterIsAcceptingJobs, accepting-jobs
因此,我的机器上的任何打印机都没有PrinterLocation。