首页 > 解决方案 > 打印机无法获取句柄

问题描述

我正在为我的打印模块设置一些测试。测试目前看起来像这样:

    PrinterData pdfPrinter = null;

    for (final PrinterData p : Printer.getPrinterList()) {
        if (p.name.contains("PDF")) {
            pdfPrinter = p;
            break;
        }
    }
    Assert.assertNotNull("No PDF printer found!", pdfPrinter);

    pdfPrinter.fileName = Paths.get("target/" + UUID.randomUUID().toString() + ".pdf");
    pdfPrinter.printToFile = true;

    Printer printer = new Printer(pdfPrinter);
    // and now do some stuff

它从 Eclipse 和通过 Maven / Tycho 构建在本地工作。

在我们的构建服务器(Jenkins,但我不太确定这是否相关)上启动时,会引发以下异常:

org.eclipse.swt.SWTError: No more handles
    at org.eclipse.swt.SWT.error(SWT.java:4308)
    at org.eclipse.swt.SWT.error(SWT.java:4197)
    at org.eclipse.swt.SWT.error(SWT.java:4168)
    at org.eclipse.swt.printing.Printer.create(Printer.java:269)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:137)
    at org.eclipse.swt.printing.Printer.<init>(Printer.java:203)

这对我来说没有任何意义。在这个反应堆中还有一些测试,但我相信它们都正确地关闭了资源。很奇怪,在添加这个测试之后,所有的句柄都被耗尽了。

所以Printer不能初始化肯定是有原因的。这是什么原因?如何修复我的代码?

注意:我尝试过不同的打印机,大多数初始化都会出现上述错误(可能与无头构建有关?),但其中一些可以正常工作,例如“Microsoft XPS Document Writer”和“Fax”。

标签: javawindowsswt

解决方案


推荐阅读