要求
我创建了一个 POS 应用程序(基于 Java),它需要使用相同的驱动程序连接到至少 2台相同的热敏打印机,打印机应该这样做:
在应用程序启动时>>每台打印机都是
open(),claim(),setDeviceEnable(true)
一次在应用程序停止>> 每台打印机将
setDeviceEnable(false),release(),close()
要在 POSPrinter1 上打印的食品
- 要在 POSPrinter2 上打印的饮料项目
到目前为止我尝试了什么
我创建了两个 POSPrinter 对象
private POSPrinter posprinter = initUSBPrinter("POSPrinter1");
private POSPrinter posprinter2 = initUSBPrinter("POSPrinter2");
private static POSPrinter initUSBPrinter(String printerName) {
POSPrinter ptr = new POSPrinter();
try {
ptr.open(printerName);
ptr.claim(1000);
ptr.setDeviceEnabled(true);
} catch (JposException e) {
e.printStackTrace();
}
return ptr ;
}
- 启动/声明两台打印机时,应用程序启动期间没有错误
- 使用 POSPrinter1 打印食品时工作正常
尝试使用 POSPrinter2 打印饮品时出现如下所示的错误:
jpos.JposException: 103 at com.sewoo.jpos.POSPrinterService.printNormal(POSPrinterService.java:4130) at jpos.POSPrinter.printNormal(Unknown Source) at util.PrintManager.printOrderingHeaderByPrinter(PrintManager.java:628) at util.PrintManager。 printDrinkByPrinter(PrintManager.java:1359) 在 util.PrintManager.printOrdering(PrintManager.java:1931) 在 util.PrintManager.lambda$print$17(PrintManager.java:1668) 在 ...
问题
因此,虽然在 init/claim 期间发现了两台打印机,但 POSPrinter1 可以在 POSPrinter2 throws 时打印得非常好jpos.POSPrinter.printNormal(Unknown Source)
。我怀疑由于 POSPrinter1 在 POSPrinter2 之前被声明,JavaPOS 驱动程序只连接到 POSPrinter1。那么单个 JavaPOS 驱动程序是否有可能只能与单个设备通信?
为了能够同时与 2 个打印设备通话,我需要安装 2 个 JavaPOS 驱动程序吗?如果是这样,我该如何配置我的应用程序呢?
这可行,但会减慢打印过程
open(),claim(),setDeviceEnable(true)
在打印作业之前连接到任一打印机setDeviceEnable(false),release(),close()
并在打印作业成功运行后断开打印机
但是在每次打印作业后连接/断开连接会大大减慢打印过程。在发送打印作业后,我通常需要等待 3-5 秒才能看到打印机最终打印单据。