最近在开发一个本地打印组件,分摊服务器的压力,使用java开发的,其中有一个功能是刷新打印机,但是遇到一个问题,困扰了好久一直没得到解决,就是启动的时候
/**
* 所有打印机设备
* @return
*/
public static PrintService[] allPrintService(){
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG;
return PrintServiceLookup.lookupPrintServices(flavor, pras);
}
这个方法能正常查询到打印机设备,但是!程序启动期间,我断开连接一台打印机,再次获取打印机列表,被断开的打印机还是能获取得到(同理,新增一台打印机后刷新,新增的打印机也一样查询不到),然而~在打印完一次数据后,再次刷新又可以获取得到最新的,,,
虽然不太影响使用,但是不得劲~终于在我的疯狂百度下,找到了一个07年的帖子,成功解决了这个问题,,感谢大佬
参考地址:PrintServiceLookup.lookupPrintServices不重新加载问题,求教! - Java企业开发 - ITPUB论坛-专业的IT技术社区y
我采用的方式:
/**
* 所有打印机设备
* @return
*/
public static PrintService[] allPrintService(){
// 多加这一行代码
AppContext.getAppContext().put(PrintServiceLookup.class.getDeclaredClasses()[0], null);
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG;
return PrintServiceLookup.lookupPrintServices(flavor, pras);
}
实践成功,撒花!