java - 打印机无法获取句柄
问题描述
我正在为我的打印模块设置一些测试。测试目前看起来像这样:
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”。
解决方案
推荐阅读
- asp.net - 在当前视图或新视图中下载文件
- python - python中带有按钮的时钟
- firebase - Flutter & Firebase:“Query”类型不是“CollectionReference”类型的子类型
- openvpn - OpenVPN 配置文件和 MFA 失败
- tensorflow - 如何使用 pickle 存储和加载 TFIdf 矢量化器?
- firebase - 使用通知服务扩展在前台来自 FCM 的 iOS 丰富通知
- batch-file - 带有数组循环的批处理 concat 变量[%x%]
- ios - 使用配置构建时 xcodebuild 失败,但在 Xcode 中成功
- postgresql - 如何在 postgresql 12.2 中导入 .sql 文件
- c - 从一个描述符进行非阻塞读取的效率