- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
要求:在 Windows 计算机上支持多个扫描仪。
工具:
问题:第一个扫描仪已成功认领。但是,声称第二个扫描仪会导致以下异常“设备已被另一个控制设备占用”。
代码分析:
SymScannerSvc112 作为用于手持式扫描仪的服务类。
SymScannerSvc112 扩展了 SymScannerSvc。 SymScannerSvc 保存静态变量“_fClaimed”。
当第一个扫描仪被认领时,静态变量“_fClaimed”被设置为 true。现在,当您尝试认领第二个扫描仪时,以下代码会阻止它,因为“_fClaimed”设置为 true。
代码:SymScannerSvc.java:
this._alreadyClaimed = false;
if(_fClaimed) {
this._alreadyClaimed = true;
this.release();
}
注意: 1. 扫描仪连接到 USB 端口。
jpos.xml
<?xml version="1.0" encoding="UTF-8"?>
<JposEntries>
<JposEntry logicalName="ZebraScannerSerial">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra Serial" name="Zebra Serial Scanner on COM1" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Scanner configuration-->
<!--Comm port device name-->
<prop name="port" value="COM1"/>
<!--Baud rate, default=9600, valid values are: 9600, 19200, 38400, 57600, 115200-->
<prop name="baud" value="9600"/>
<!--Data bits, default=7, valid values are: 5, 6, 7, 8-->
<prop name="databits" value="8"/>
<!--Stop bits, default=1, valid values are: 1=1 stop bit, 2=2 stop bits, 3=1.5 stop bits-->
<prop name="stopbits" value="1"/>
<!--Parity, default='O' (Odd), valid values are: 'N'one, 'O'dd, 'E'ven, 'M'ark, 'S'pace-->
<prop name="parity" value="O"/>
<!--Port mode, default='B', valid values are: 'B'=Nixdorf-B-->
<prop name="mode" value="B"/>
<!--UPC-A Length, default=13, indicates the number of digits generated by the scanner-->
<!--for UPC-A labels based on the scanner's preamble and check digit settings.-->
<!--The scanner service uses this value to determine when supplementals are present.-->
<!--The default value of 13 assumes preamble is set to system character-->
<!--and country code and that transmit check digit is enabled-->
<prop name="UPCALength" value="13"/>
<!--UPC-E Length, default=7, indicates the number of digits generated by the scanner-->
<!--for UPC-E labels based on the scanner's preamble and check digit settings.-->
<!--The scanner service uses this value to determine when supplementals are present.-->
<!--The default value of 7 assumes preamble is set to system character-->
<!--only and that transmit check digit is disabled-->
<prop name="UPCELength" value="7"/>
<!--Scanner type, default=0, valid values are: 7 - NixdofrUSB-->
<prop name="ScannerType" value="7"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraScannerUSB">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra USB" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="USB"/>
<!--Scanner type, default=0, valid values are: 6 - IBM HID-->
<prop name="ScannerType" value="6"/>
<prop name="ExclusiveClaimLevel" value="1" />
</JposEntry>
<JposEntry logicalName="IBM HANDHELD">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra USB" name="Zebra Scanner" url="https://www.zebra.com" />
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="USB"/>
<!--Scanner type, default=0, valid values are: 6 - IBM HID-->
<prop name="ScannerType" value="6"/>
<prop name="ExclusiveClaimLevel" value="1" />
</JposEntry>
<JposEntry logicalName="ZebraUSBTableTop">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra USB Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="USBIBMTT"/>
<!--Scanner type, default=0, valid values are: 18944=TableTop(0x4A00)-->
<!--prop name="ScannerType" value="18944"-->
<prop name="ScannerType" value="9"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraUSBHandHeld">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra USB Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="USBIBMHID"/>
<!--Scanner type, default=0, valid values are: 19200=HandHeld(0x4B00)-->
<prop name="ScannerType" value="19200"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraUSBOPOS">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra USB Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="USBOPOS"/>
<!--Scanner type, default=0, valid values are: 13 -->
<prop name="ScannerType" value="13"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraScannerSNAPI">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra SNAPI Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Other non JavaPOS required properties-->
<!--Comm port device name, must be 'USB' for USB scanner-->
<prop name="port" value="SNAPI"/>
<!--Scanner type, default=0, valid values are: 2 - SNAPI-->
<prop name="ScannerType" value="2"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraAllScanners">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra Serial/USB Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Scanner type, default=0, valid values are: 1- ALL Scanners-->
<prop name="ScannerType" value="1"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="IBM HANDHELD">
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scanner" version="1.12"/>
<product description="Zebra Serial/USB Scanner" name="Zebra Scanner" url="https://www.zebra.com"/>
<!--Scanner type, default=0, valid values are: 1- ALL Scanners-->
<prop name="ScannerType" value="1"/>
<prop name="ExclusiveClaimLevel" value="0" />
</JposEntry>
<JposEntry logicalName="ZebraScale">
<creation factoryClass="com.motorola.jpos.service.SvcServiceInstanceFactoryImpl" serviceClass="com.motorola.jpos.service.scale.ScaleService113Impl"/>
<vendor name="Zebra Technologies" url="https://www.zebra.com"/>
<jpos category="Scale" version="1.13"/>
<product description="Zebra Scale" name="Zebra Scale" url="https://www.zebra.com"/>
<prop name="ErrorOnSameWeight" value="1"/>
</JposEntry>
最佳答案
我想事情可能已经很清楚了。评论中写的额外解释请求是不必要的。
这是因为服务对象最初的设计不正确。创建服务对象并不是为了使一个应用程序可以同时使用同一供应商的多个扫描仪。
可能是由于Java语言的特性,厂商构建了这个问题,试图轻松实现很难实现的排除控制。
如果您想同时使用多个扫描仪,请考虑设备配置,以便每个扫描仪使用不同的服务对象。
就 jpos.xml 而言,所有 Zebra 扫描仪似乎都使用相同的服务对象,因此请准备其他供应商的扫描仪。
“考虑设置设备,使每个扫描仪在不同的服务对象上运行”是指,例如,当将多个扫描仪同时连接到单个 POS 时,如第一台设备为 Zebra DS2208、第二台设备为 Honeywell Genesis 7580g、第三台设备为 Denso-Wave QK30,请勿连接同一供应商的多台扫描仪。
原因是jpos.xml中每个设备条目的以下部分都指定了一个要操作的服务对象,但即使是另一个扫描仪(例如“ZebraScannerSerial”和“ZebraScannerUSB”),这些内容如果相同,也会被认为是同一个服务对象在工作。
<creation factoryClass="com.motorola.jpos.service.scanner.SymScannerSvc112Factory" serviceClass="com.motorola.jpos.service.scanner.SymScannerSvc112"/>
如果认为同一个Zebra服务对象共享变量'_fClaimed',就会出现问题现象。
关于java - 斑马 jPOS : How to have support for multiple scanners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488115/
我正在使用 jpos 客户端(在 java Spring MVC 程序的类中)连接基于 ISO8585 的服务器,但是由于某种原因服务器无法响应,因此我的程序一直在等待响应并导致挂我的程序。那么实现连
我已经从这个链接下载了 jPOS-master.zip。 (https://github.com/jpos/jPOS)。 运行命令gradle clean dist installApp 找到jPOS
我试图解决 jPOS:2.0.8 版本但它失败了,因为无法解决 com.sleepycat.je:je:7.0.6 的依赖关系。 com.sleepycat je 7.0.6 compile 我已
默认情况下,如果我在Windows cmd中运行gradle installApp命令,它将生成一个名为jpos-1.9.8.jar的jar文件。但是我的项目要求我使用projectName.jar生
我们将 jpos 与 Q2 一起使用,我们的一个 webapp 部署在 tomcat6 上,一切都很好。现在我们必须使用 q2 东西实现另一个 jpos 应用程序,但是当我们将它部署在同一个 tomc
我是 JPOS 的新人。我需要一些帮助。请在下面找到我的要求。 在 TCP 连接术语中,IST 交换机配置为服务器,MPOS 服务器配置为客户端。 MPOS 服务器和 IST 交换机应通过单个 TCP
我在使用磁条卡生成交易时遇到此错误。你能指出这里的问题是什么吗? org.jpos.iso.IFB_LLLCHAR: Problem unpacking field 54 (java.lang
我们是 JPos 库的新手,我们希望自动化需要外围交互的测试用例。 为了自动化多个场景的测试,我们希望绕过连接的外围设备并为我们的应用程序提供模拟值。 例如我们有一个连接的“秤”来测量重量,我们想模拟
我的应用程序是一个 POS 系统,具有使用单个打印机的单个终端。问题是什么时候适合调用 open()、 claim() 和 setDeviceEnabled(true) 和 setDeviceEnab
我正在创建一个新的支付应用程序。我有一个客户端应用程序,用户可以选择价格,输入其身份验证信息,然后客户端创建 iso 8583 消息并将此数据发送到银行服务器。 根据我的研究,我可以使用 jPOS 来
我通过this一步步设置jPOS JAR服务器.我通过以下代码创建服务器: public class jPOSServer implements ISORequestListener { pu
我在 JPOS 中配置 RESTFul API jpos-rest.pdf 。 问题是我无法从客户端接收数据,但我可以向客户端发送数据。 在 Echo.java 类中,通过以下代码我可以发送数据: p
我有一个事务管理器,我是这样配置的
我正在制作 POS 系统,现在我正在尝试设置 pos 打印机 epson tm-t20。当我尝试打开端口时,打印机在哪里,我收到此错误消息: jpos.JposException: Could not
我使用这个代码: import org.jpos.iso.ISOPackager; import org.jpos.iso.packager.GenericPackager;
在我目前的公司,我们正在考虑使用 jPOS 与其他系统进行 ISO 8583 集成。我已经阅读了一段时间的免费文档,但我仍然有很多差距。例如: jPOS 应该如何在产品中工作?我应该开始第二季度吗服务
我在一个项目中工作,其中一个请求(ISO 8583)需要通过JPOS服务器通过SOAP发送到支持(根据官方文档的远程主机)应用程序接口(interface)。 我们已经实现了我们的系统如下: 我们在中
我是 JPOS 的新人。我们已经为多个客户端实现了 jpos 服务器。 here is a image of my scenario 例如,我们有 n 个客户。每个客户端的 ISO 消息格式都不同。
我有一个工作的 JPOS ISO8583 服务器,能够异步处理请求,然后我需要开发一个测试客户端来对其进行压力测试。 我想知道,多路复用器是否能够同时处理多个请求并并行处理它?请参阅此图。我正在使用
JavaPOS 新手,想要使用 JavaPOS 操作 POSPrinter。 已经安装了我的打印机,并且它实际上被选为我的操作系统中的主打印机。 问题是我不知道如何编写 jpos.xml 文件,也没有
我是一名优秀的程序员,十分优秀!