早上好,
我有一个 Java 程序 orderPrinter,它通过 USB 到串行通信与 POS 打印机通信。我按照说明安装了 RXTX 和 javax.comm 库,在对文件位置进行了一些摆弄之后,成功地让程序在我的机器上运行(Windows 7)。
但是,我在让它在 Windows XP 中工作时遇到了困难(在分发之后,它将成为主要平台,我认为次要平台是 Linux)。在将 64 位 JAR 和 DLL 文件替换为各自的 32 位替代品(如在RXTX wiki上找到)之后,我遇到了几个问题:
1) RXTX 似乎无法找到正确的 COM 端口。通过 echo [gibberish] >> COMx 进行测试会生成响应,因此我知道打印机位于 COM5。以下代码:
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
System.out.println("Port: "+((CommPortIdentifier)(portList.nextElement())).getName());
}
CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier(settings.port);
打印出“端口://./COM5”作为 32 位机器上的唯一端口,而在 Windows 7 中,我得到“端口:COM5”。我遇到的第一个问题是在 XP 中调用 CommPortIdentifier.getPortIdentifier(port) 失败;我只能想象这是由于 CommPortIdentifier 与端口名称完全匹配。有没有办法修改 JAR 以允许更宽松的端口匹配?
2)假设现在,作为临时修复,我硬编码了 Windows XP 的确切预期字符串。紧接着,当我调用 portID.open([正确的参数) 时,程序崩溃并出现以下错误:
Exception in thread "main" java.lang.VerifyError: (class: gnu/io/RXTXPort$SerialOutputStream, methd: flush signature: ()V) Illegal use of nonvirtual function call
我发现的每个解决方案都归结为使用旧版本的 RXTX;但是,如前所述,我使用的是 2.1-7r2,据我所知,这是最新的稳定版本。我对这个错误以及如何修复它感到完全困惑。有任何想法吗?
请记住,虽然我熟悉 java 编程,但我对与构建相关的错误的理解要有限得多,这似乎就是这种情况;我也希望能够解释这个问题,以便将来更容易解决这个问题。
感谢您的时间。
编辑:我相信我有解决问题 1 的方法;修改源代码,然后重新编译。不过,我真的没有时间调试为什么 javac 在提示符中不是有效命令,我也没有找到在 Eclipse 中执行此操作的可靠方法。同样,这是我第一次做除了导入 JAR 之外的任何事情,所以至少可以说这是一次学习经历。或者在这一点上进行试炼。