我正在为我的打印模块设置一些测试。测试目前看起来像这样:
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
无法初始化。这是什么原因?如何修复代码?
注意:我尝试过不同的打印机,并且初始化大多数会带来上述错误(可能与无头版本相关?),但其中一些可以正常工作,例如&#34; Microsoft XPS Document Writer&#34;和&#34;传真&#34;。