【问题标题】:RxTx installation on windows java.lang.NoClassDefFoundError: gnu/io/CommPortWindows 上的 RxTx 安装 java.lang.NoClassDefFoundError: gnu/io/CommPort
【发布时间】:2012-09-22 11:06:00
【问题描述】:

我把rxtxcomm.jar放到jre/lib/ext文件夹下,还是得到NoClassDefFoundError这个文件夹不是自动带进全局类路径了吗?

谢谢

【问题讨论】:

  • 唯一合理的答案是您运行程序时使用的JRE 与您放入jar 文件的JRE 不同。
  • 您能否发布异常堆栈跟踪。可能您将 RXTXcomm.jar 放在了正确的位置,但您没有提供外部库的路径
  • 请查看更新,根据您的需要,使用 jssc 可能会更好
  • 我也有同样的问题 -> stackoverflow.com/questions/36762416/… 。如果你解决了你的问题,我们将不胜感激。
  • 我用 JSSC 重构了我的项目,我解决了所有问题。

标签: classpath java rxtx


【解决方案1】:

是的,它会自动进入类路径,但 RXTXcomm 使用 JNI /native 外部库(.so 和 .dll 文件),在命令行中运行程序时必须提供它们的路径:

java -jar yourprogram.jar -Djava.library.path="PATH_TO_EXTERNAL_LIBRARIES"

对于 Linux:

假设您将rxtx.zip 解压缩为 /home/user/

如果您有 32 位 x86 平台:

PATH_TO_EXTERNAL_LIBRARIES = /home/user/Linux/i686-unknown-linux-gnu/

如果你有 64 位 x86 平台,那就是:

PATH_TO_EXTERNAL_LIBRARIES = /home/user/Linux/x86_64-unknown-linux-gnu/

对于窗户:

假设你下载并解压到 C:\rxtxt

PATH_TO_EXTERNAL_LIBRARIES = C:\rxtxt\Windows\i368-mingw32\

如果您发现从命令行执行此操作很麻烦,您可以从您的代码中执行此操作(通过 RXTXcomm 打开端口之前):

System.setProperty("java.library.path","PATH_TO_EXTERNAL_LIBRARIES");

编辑:

当然,除了上述所有内容之外,您还必须将 RXTXcomm.jar 放入您的类路径中。如果从命令行作为 jar 打包程序运行 - yourprogram.jar - 在 jar 内,您必须有一个 META-INF 文件夹,其中包含 MANIFEST.MF 和以下条目:

Class-Path: lib/RXTXcomm.jar
Main-Class: pkg.Main

并且 yourprogram.jar 必须在具有文件夹 lib 的文件夹中,其中 RXTXcomm.jar 也 带有

的类
public static void main(String[] args)

方法必须被称为 Main 并位于名为 pkg 的包中(只需将 pkg.Main 替换为您拥有的任何内容)。

然后你就可以成功运行你的程序并打开一个串口(如果有的话)。这种方法还消除了复制 jre/lib/ext 文件夹中任何内容的需要

编辑^2:

或者,如果您不想将程序打包到 jar 中,请将自己定位在包含文件夹 pkg 的文件夹中并写入:

java -cp PATH_TO_RXTX/RXTXcomm.jar -Djava.library.path="PATH_TO_EXTERNAL_LIBRARIES" pkg.Main

(所有路径都可以是相对的或绝对的)

编辑^3:

但我会推荐 Java Simple Serial Connector 而不是 RXTXcomm:

  • 与 RXTXcomm 相比,它处理来自多个线程的重负载(在生产中测试)
  • 外部库打包在 jar 中,因此无需设置 java.library.path

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多