Windows 10

时间:2016-03-12 13:59:06

标签: java printing java-8 windows-10

我已将Windows环境从8更新到10,并发现未返回默认打印机,而是返回另一台打印机。

我已关闭“让Windows管理我的默认打印机”设置,但仍未获得默认打印机。

我有以下代码:

 private void testPrinter() {
    PrintService[] array = PrintServiceLookup.lookupPrintServices(null, null);
    for(PrintService ps : array){
        System.out.println(ps.getName());
    }

}

在此测试中,我获得了以下打印机列表:

  • 发送至一个便笺

  • Microsoft XPS文档编写器

  • HP打印机

  • Epson Printer(在Windows中设置为我的默认打印机)

但是,在以下测试中:

 PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
 System.out.println(ps.getName());

我得到惠普打印机,这不是我的默认打印机!无论我选择哪台打印机作为默认打印机,都会始终返回HP打印机

我查看了用于lookupDefaultPrintService方法的java API,并说明了以下内容:

  

找到此环境的默认打印服务。这可能   返回null。如果多个查找服务都指定了默认值,则   选择的服务没有精确定义,而是一个原生的平台   服务,而不是已安装的服务,通常作为   默认。如果没有明确可识别的平台本机默认值   打印服务,默认是第一个位于   依赖于实现的方式。

     

这可能包括使用任何可用的首选项API   作为Java或本机平台的一部分。这个算法可能是   由用户设置属性javax.print.defaultPrinter覆盖。   必须发现指定的服务有效且当前   可以作为默认值返回。

在Windows 8中,返回默认打印机没有问题。更新后我遇到了这个问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

正如本guide所指出的,Windows 10每次打印时都会重新配置默认打印机,将默认值设置为上次使用的设备。您必须更改此设置。

编辑:您还可以尝试通过注册表(regedit.exe)直接禁用该功能,搜索所有LegacyDefaultPrinterMode DWORD实例并将其设置为1(关闭)。通常主要实例在这里:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows