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
- 在ant中设置类路径的问题
- 如何将图标作为类路径资源添加到使用WindowBuilder创建的SWT窗口中?
- 如何在不使用-cp开关的情况下在Groovy中自动加载数据库jar?
- 我收到“java.lang.ClassNotFoundException:com.google.gson.Gson”错误,即使它是在我的类路径中定义的
- Mac用户 – 如何在Mac中设置CLASSPATHS(我正在进行Lucene演示)
- Netbeans:需要在classpath中包含第三方目录
- Java Manifest文件的类路径以及它如何确定相对dirs
- 有没有办法判断类路径资源是文件还是目录?
- 带有已部署的动态Web项目的WebSphere ClassNotFoundException