Java RXTX库不支持';无法加载本机库
基本上,我想使用为我的Arduino编写一个简单的通信工具,但在加载动态库时失败了 我的系统规格:Java RXTX库不支持';无法加载本机库,java,macos,arduino,rxtx,Java,Macos,Arduino,Rxtx,基本上,我想使用为我的Arduino编写一个简单的通信工具,但在加载动态库时失败了 我的系统规格: OS:OS X约塞米蒂10.10.3 Java:SDK 1.8.0_45 RXTX:2.1-7r2-针对运行64位java的英特尔mac的修改版,可以找到。 IDE:NetBeans 8 我检查了这些文件是否按照安装说明工作,安装说明只是将这两个文件复制到/Library/Java/Extensions目录中 现在我想删除它们并从应用程序中加载库。 我做了以下工作: 将RXTXcomm库添加到n
OS:OS X约塞米蒂10.10.3
Java:SDK 1.8.0_45
RXTX:2.1-7r2-针对运行64位java的英特尔mac的修改版,可以找到。
IDE:NetBeans 8
我检查了这些文件是否按照安装说明工作,安装说明只是将这两个文件复制到/Library/Java/Extensions目录中 现在我想删除它们并从应用程序中加载库。 我做了以下工作:
- 将RXTXcomm库添加到netbeans中的项目中
- 使用以下代码将本机库的容器包含在“java.library.path”属性中
System.setProperty(“java.library.path”,
location.getPath()+File.pathseptor+System.getProperty(“java.library.path”)代码>
- 并使用
System.loadLibrary(“rxtxSerial”)
当我编译代码并试图运行它时,它给了我一个
java.lang.UnsatifiedLink错误:java.library.path中没有rxtxSerial
现在我想知道我做错了什么(可能是一些重大的误解?)
任何帮助都将不胜感激 这是对您的问题的解释和解决方案的建议
我认为RXTX有两个主要问题:
根据您的IDE,您需要将Mac:RXTXcomm.jar
和librxtxSerial.jnilib
PC:RXTXcomm.jar
,rxtxSerial.dll
放在IDE或Java代码中项目的根目录上,它因IDE而异。这里的文档没有介绍如何在不同的IDE(如NetBeans、IntelliJ)中实现这一点,即使这样,我也让它同时在Eclipse和IntelliJ上工作,但还没有在NetBeans上工作。我还有其他问题
根据您的操作系统,即使您启动并运行此软件包,例如在Windows 8.1中,它也会在关闭端口时出现问题。唯一的解决方案是重新启动IDE/控制台并重新连接
不管怎样,我建议您使用一个名为JSSC的问题更少的包
下面是一个使用JSSC从串行端口读取数据的简单方法:
public class Main {
public static void main(String[] args) {
SerialPort serialPort = new SerialPort("COM1");
try {
serialPort.openPort();//Open serial port
serialPort.setParams(9600, 8, 1, 0);//Set params.
byte[] buffer = serialPort.readBytes(10);//Read 10 bytes from serial port
serialPort.closePort();//Close serial port
}
catch (SerialPortException ex) {
System.out.println(ex);
}
}
}
- 请参阅所有代码示例
- 该软件包可以下载
注意:这是一个开放式答案,如果你们中有人对此有经验,请编辑答案。
我见过有人问问题,并且对RXTX I general有几乎相同的问题。我也有同样的问题,但我相信我知道原因
我以前在OSX(Maverick)上运行RXTX,但发现我需要的功能仅在Java8JDK中可用。我通过机器上的Java6JDK安装了它,一旦安装完成,就无法使用RXTX库运行任何代码
我认为问题在于JDK 6之后的版本不包括RXTX所需要的32位环境
如果您使用的是较新的JDK,那么我建议您安装Java6JDK,看看这是否能解决您的问题。以前运行编译程序时,我需要包含“-d32”以指定如何利用32位环境。ie:“java-d32测试”除了我最近的回复
这是删除提到的缓存的代码:
try {
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (NoSuchFieldException |
SecurityException |
IllegalArgumentException |
IllegalAccessException ex) {
ex.printStackTrace(System.err);
}
所以问题不是rxtx库,而是我自己读java文档的失败。因为我确信在开始的某个地方提到了这一点。项目根RXTXcomm.jar、rxtxParallel.dll、rxtxSerial.dll上应该有以下3个文件。不同的IDE将这些文件放置在不同的IDE中。如果有帮助,请告诉我。因此,我可以给出一个有指导性的答案,因为我在mac上,所以我只有两个文件:RXTXcomm.jar和librxtxSerial.jnilib。(下载预编译文件时没有mac的并行本机库)没问题,概念是一样的,我在windows上也遇到过同样的问题,问题是,从IDE编译时,它需要知道文件的位置,我认为,如果您发现将它们放置在项目的正确根文件夹位置,将解决问题。否则我建议你去JSSC软件包,最好我反复检查路径,它是正确的,这就是我加载目录后得到的:file:/Users/redxef/NetBeansProjects/arduino\u io/dist/lib:/Users/redxef/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/Java:。在第一个目录中都是文件OK,试试jssc,因为我使用RXTX的经验不是很好,有很多问题。也许JSSC会帮你解决这个问题。我最近发现了一个问题:因为Java只在启动时添加库,所以如果你在虚拟机已经启动并运行时更改它们,它不会改变任何东西。一种解决方法是删除缓存或使可执行文件使用正确的参数重新启动自身。