Java windows 10中未返回默认打印机

Java windows 10中未返回默认打印机,java,printing,java-8,windows-10,Java,Printing,Java 8,Windows 10,我已将windows环境从8更新到10,发现没有返回默认打印机,而是返回了另一台打印机 我已关闭“让windows管理我的默认打印机”设置,但仍无法获取默认打印机 我有以下代码: private void testPrinter() { PrintService[] array = PrintServiceLookup.lookupPrintServices(null, null); for(PrintService ps : array){ System.ou

我已将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打印机(在windows中设置为我的默认打印机)

但是,在以下测试中:

 PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
 System.out.println(ps.getName());
我得到了HP打印机,它不是我的默认打印机!!!无论我选择哪台打印机作为默认打印机,HP打印机始终返回

我查看了lookupDefaultPrintService方法的java API,它显示了以下内容:

查找此环境的默认打印服务。今年五月 返回null。如果多个查找服务各自指定默认值,则 所选服务没有精确定义,而是一个本机平台 服务,而不是已安装的服务,通常作为 违约如果没有可明确识别的平台本机默认值 打印服务,默认为位于 依赖于实现的方式

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

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

如本文所述,Windows 10会在每次打印时重新配置默认打印机,将默认设置为最后使用的设备。您必须更改此设置

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

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

我已经关闭了“让windows管理我的默认打印机”功能,但即使如此,我仍然无法获得默认打印机!正如问题中所解释的那样。@Fared我已经用一个更激进的解决方案编辑了我的答案。@Matteo Baldi,也许你可以在以下方面提供帮助:谢谢