Windows上的RxTx安装java.lang.NoClassDefFoundError:gnu / io / CommPort

我把rxtxcomm.jar放到jre/lib/ext文件夹中,但我仍然得到NoClassDefFoundError这个文件夹是不是自动进入全局类路径?

谢谢

是的,它自动被带到类路径,但RXTXcomm使用JNI /本机外部库(.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 /

对于Windows:

假设您已将其下载并解压缩到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中你必须有一个包含MANIFEST.MF的META-INF文件夹,其中包含以下条目:

 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