【问题标题】:JavaFX - javafx.print.PrinterJob.createPrinterJob() is always null on macJavaFX - javafx.print.PrinterJob.createPrinterJob() 在 Mac 上始终为空
【发布时间】:2017-09-12 04:38:44
【问题描述】:

我正在使用 JavaFX PrinterJob 打印节点,如下所示:

    /**
 * @param node
 */
public static final void print(Node node)
        throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
    Printer printer = Printer.getDefaultPrinter();
    PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.LANDSCAPE,
            Printer.MarginType.HARDWARE_MINIMUM);
    PrinterJob job = PrinterJob.createPrinterJob();

    if (job != null && job.showPrintDialog(CommonConstants.geMasterStage())) {
        boolean success = job.printPage(pageLayout, node);
        if (success) {
            job.endJob();

        }
    }
}

这在 Windows 上运行良好,但是,Printer.getDefaultPrinter(); 在 mac 上始终为空,所以我确保打印机可用,它是可用的,Printer.getAllPrinters() 返回空数组。

请注意java.awt.print.PrinterJob.getPrinterJob() 在 windows 和 mac 上都可以正常工作。

是什么问题或我做错了什么?

【问题讨论】:

  • 它对我来说很好用。你有安装打印机吗?在这种情况下,Printer.getAllPrinters() 应该返回一个非空列表。
  • @JoséPereda 是的,我有,而且它在 java.awt 打印机作业中工作得很好,,,这很奇怪
  • 我遇到了同样的错误,你解决了吗?
  • @pcambre nope,我们实现了其他东西,

标签: java macos javafx printing


【解决方案1】:

我遇到了同样的问题,每当我使用 Printer.getAllPrinters() 检查可用的打印机时,它会显示所有可用的打印机,但 createPrinterJob() 总是返回 null。

所以我确实通过在 MacOS 中 System Preferences 上的 Printers & Scanners 设置下右键单击打印机来重置打印系统。重置打印系统后,将打印机再次添加到打印机列表中。然后在 Java 上再次运行 createPrinterJob(),之后再也没有收到 null。

【讨论】:

  • 这对我有用。由于我没有使用迁移助手设置此 M1 MBP,因此没有设置任何打印机。一旦完成,一切都会像以前一样工作。
【解决方案2】:

我也遇到了同样的问题。它仍然没有解决。但是我发现在控制台中刷新打印机列表后它可以获取打印机。我在 createPrinterjob() 之前添加了一行,它有时会起作用(并非总是如此)。

"Runtime.getRuntime().exec("lpstat -p -d")"

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 2018-09-19
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多