7

我们使用一个通过串行端口管理 pinpad 的 java 应用程序。这在带有 Sun Comm.jar、提供的 dll 和属性文件的 Windows 上完美运行。

现在我们正在尝试在 Linux 上使用这个解决方案(实际上它确实可以在现场的各种其他风格的 linux 上运行) - 使用 Ubuntu 服务器模式。

经过多次尝试 - 鲜血,汗水和几乎眼泪,我们有这样的场景:

Java 版本 1.4.2_17 Linux - Ubuntu Comm libs - 由 sun 提供的 Comm3,并指定了默认驱动程序

外部通讯测试显示通讯端口:/dev/ttyS0 和 /dev/ttyS1 但 java 应用程序说无法打开端口 /dev/ttyS1

(使用 RXRT 文件会产生无效的端口错误)

有没有人能够在 linux 上使用 java 1.4.2 进行串口通信并找到我可以在我的场景中应用的解决方案?

非常感激

菲尔

4

5 回答 5

4

我知道这是一个老问题,但我创建了一个 Java 包和本机库来允许串行端口读写,目前仅在同步模式下。

它是开源的,可在 GitHub 上找到:

j232 - Java 源代码

libj232 - j232 的原生库。

维基页面在这里

请注意,这是一个仅限 Linux 的包和库。

于 2015-01-24T21:28:01.987 回答
2

确保您使用的是有权访问串行端口的用户。有些发行版将串行端口放在 uucp 组中,因此请确保用户属于该组。

于 2009-03-12T14:58:49.807 回答
1

自从我这样做以来已经有一段时间了。我记得您不能只将 /dev/ttyS0 作​​为文件打开并对其进行 I/O。

我记得 Sun IO jar 也有同样的问题。

我记得解决的解决方案是在 C 中创建一个小型命令行程序,它将 stdin 回显到串行端口,将串行端口回显到 stdout。然后,我从我的 java 进程中启动了这个程序。我没有代码,但是网上有很多关于写入 linux 串行端口的 c 程序的示例。

于 2009-03-12T13:21:13.660 回答
1

几年来,我们一直在 Windows 和 Linux 上使用 SerialIO 库进行 Java 串行通信,并取得了很好的效果(不,我不为他们工作 :-)):

http://serialio.com/products/serialport/serialport.php

但是,这些库不会自动检测 Linux 上的可用串行端口 - 您必须手动配置它们。

于 2009-03-12T15:11:46.407 回答
0

我们没有改变太多,使用的库中没有任何变化。但是在串行端口对象上删除事件监听器的使用解决了这个问题。

这实际上允许我们的代码在 linux(jre1.4.2、slackware 和 Suns Comm3 驱动程序)上运行,而这在 windows 上不是问题 - 奇怪。

菲尔

于 2009-03-13T13:54:36.277 回答