2

早上好,

我有一个 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 之外的任何事情,所以至少可以说这是一次学习经历。或者在这一点上进行试炼。

4

0 回答 0