【问题标题】:Stable alternative to RXTXRXTX 的稳定替代品
【发布时间】:2012-09-07 11:52:15
【问题描述】:

在将 RXTX 用于许多不同的项目之后,我遇到了许多令人讨厌的差异和问题,这些问题只能合理地归结为库中的错误 - 死锁、竞争危险和 RXTX 库深处的监控线程被保持打开状态以防止程序关闭(即使我使用的所有端口都已关闭!)运行最新的“不稳定”版本有所帮助,但它仍然远离我称之为可靠的地方,以及项目上的活动目前似乎相当低。

但是,寻找 RXTX 的免费跨平台替代品似乎并没有什么其他的想法。

还有其他人尝试过的更幸运的库吗?我不需要并行端口支持,只需要串行端口,它不一定要与 RXTX 或javax.comm API 兼容。

【问题讨论】:

  • 新的 2.5.0 版本的 jSSC 库可用,它包含一些重要的修复,强烈建议更新。欲了解更多信息,请参阅:code.google.com/p/java-simple-serial-connector
  • 我目前遇到和你一样的问题......库内总是出错,死锁,而你足够小心以正确关闭所有端口......这真的很烦人。真正考虑其他选择。
  • @Mxsky FWIW,jssc(链接在下面)从那时起对我来说效果很好:)
  • 你试过了吗? github.com/Fazecast/jSerialComm
  • 我会投给 jSerialComm。我们在串行应用程序中使用了这种可靠的 RXTX。无需维护原生组件是一大优势。

标签: java serial-port rxtx


【解决方案1】:

我们已移至java-simple-serial-connector,这在当前版本 0.9.0 中似乎非常稳定和舒适。目前,它适用于 windows 和 linux 系统。我们将它用于调制解调器交互。

【讨论】:

  • 目前看来这项工作做得很好(并且似乎包含它需要的本机库,另一个优点。)谢谢!
  • 我们在运行 JamVM 的 ARM 硬件上遇到了一些 RxTx 问题,尤其是在 CPU 方面。使用具有接收超时和阈值设置的阻塞调用的测试程序在 15-30% 的 CPU 上运行,当使用多个端口时会成倍增加。现在,jssc 不提供阈值设置,所以我使用事件 API 实现了它。然而,事件 API 和带有超时参数的读取方法都使用了繁忙的循环(Thread.sleep),这在目标上使情况变得更糟:我们已经在一个串行端口上运行了 100% 的 CPU 通信!跨度>
  • @jaw 在 arm 上出现同样的问题,RXTX 的本地库正在轮询端口以获取事件并占用大量 CPU。再加上我有多个串行端口来监控它确实会占用资源并增加系统延迟。
  • 库虽然5年多没更新了,但是做简单的任务还是不错的。可用于与arduino通信,比RxTx简单方便。
  • 最新版本(2.8.0,截至写作时已有 6 年历史)每 14 天崩溃一次
【解决方案2】:

还有jSerialComm

Java 中的串行通信是一团糟。我在 linux 上使用带有虚拟 USB 串行的 jSSC 时遇到了问题,但是通过串行通信连接了它。

RXTX 一团糟。

至少我认为现在这个 SO 问题有所有值得一提的串行通信 java 库。

【讨论】:

  • +1 用于串行通信。在厌倦了 RXTX 的可怕混乱之后才开始检查它。相比之下,串行通信是干净且有据可查的。我刚刚在大约半小时内取出 RXTX 并将串行通信集成到我的项目中。可爱的。
  • +1 用于 jSerialComm,易于集成,无需外部库或任何本机代码。您并不关心您的操作系统是 32 位还是 64 位
  • +1 用于 jSerialComm。我们在工业应用中使用它,它比 RXTX 更可靠且封装更好。也许应该将库的名称重命名为 jSerialComm 以避免混淆,另一个人添加了具有相同建议的另一个答案。
  • @simgineer 我更新了库名,谢谢。
【解决方案3】:

现在有一些,现在 Arduino 很受欢迎。

Serialio

PureJavaComm,但据我所知,它还处于开发的早期阶段。

这真的取决于您的需求。 RXTX 几乎已被移植到任何地方,因此可以广泛使用。

【讨论】:

  • SerialIO 似乎是一种成本很高的商业产品。嘘!
  • PureJavaComm 非常好(而且免费)。我已经将它用于串行通信几年了,发现它非常强大。
【解决方案4】:

我遇到的 RXTX 问题之一是延迟关闭端口。在使用 setserial 检查端口配置时,我发现了一个参数 closure_delay=3000。这意味着端口在 close() 方法执行后 3 秒关闭。 RXTX 会忽略将 closing_delay 重置为任何值。 RXTX 坚持要延迟 3 秒。

JSSC 库的表现令我们满意

【讨论】:

    【解决方案5】:

    Serialio lib 是 49 美元/平台/开发者席位,可让您在无限应用程序中无限分发,因此价格不会太高。 Mac 库在要求不高的应用程序中对我们来说是稳定和可靠的,并且对于各种 Mac 平台和 OS/X 版本的可用性/兼容性一直很好。

    【讨论】:

      【解决方案6】:

      我使用配置为为串行端口提供套接字的 socat。 缺点是波特率等被赋予了 socat 调用,这不是你可以从你的程序中轻易改变的东西。 好处是我可以通过网络进行连接,而无需更改我连接的 IP 地址。

      【讨论】:

      • 我也使用过 Serialio lib,它对我来说效果很好。
      【解决方案7】:

      jSerialCom 不错! 'https://github.com/Fazecast/jSerialComm'

      这是它的维基页面:https://github.com/Fazecast/jSerialComm

      【讨论】:

      • Miguelcobain 的回答建议使用同一个库,尽管他称它为不同的库。
      • "也许库名应该改名为jSerialComm,以免混淆"!不知道他的意思:'jSerialComm'应该改名为'jSerialComm'?
      • 原始答案以不同的名称引用了 jSerialComm,此后已更正,因此提及不正确的名称可能会造成混淆。
      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2012-01-25
      • 2015-08-05
      相关资源
      最近更新 更多