基本上我想使用RXTX Library for java为我的Arduino编写一个简单的通信工具,并且在加载动态库时失败了。
我的系统规格:
OS:OS X Yosemite 10.10.3
Java:SDK 1.8.0_45
RXTX:2.1-7r2 - 运行64位java的intel mac的修改版本,可以找到here。
IDE:NetBeans 8
我检查过,这些文件按照安装说明工作,这只是将这两个文件复制到/ Library / Java / Extensions目录中。
现在我想删除它们并从我的应用程序加载库。 我做了以下事情:
System.setProperty("java.library.path",
location.getPath() + File.pathSeparator + System.getProperty("java.library.path"));
System.loadLibrary("rxtxSerial")
当我编译代码并尝试运行它时,它给了我一个
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
现在我想知道我做错了什么(也许是一些很大的误解?)
任何帮助将不胜感激!
答案 0 :(得分:1)
这是对您的问题的解释和对解决方案的建议。
RXTX在我看来有两个主要问题:
RXTXcomm.jar
和librxtxSerial.jnilib
PC:RXTXcomm.jar
,rxtxSerial.dll
放在IDE或Java项目的根目录中代码,它因IDE而异。这里的文档没有介绍如何在不同的IDE(如NetBeans,IntelliJ)中执行此操作,因此我将其用于Eclipse和IntelliJ,但尚未使用NetBeans。我还有其他问题。我建议你去看一个名为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一般有相同的问题。
答案 1 :(得分:1)
我遇到同样的问题,但相信我知道原因。
我以前在OSX(Maverick)上运行了RXTX,但发现我只需要Java 8 JDK中提供的功能。我在机器上的Java 6 JDK上安装了它,一旦完成就无法使用RXTX库运行任何代码。
我认为问题在于6后的JDK版本不包含RXTX所需的32位环境。
如果您使用的是较新的JDK,那么我建议您安装Java 6 JDK,看看这是否可以解决您的问题。在以前运行我编译的程序时,我需要包含“-d32”来指定使用32位环境。即:“java -d32 test”
答案 2 :(得分:0)
除了我最近的回复this one。
这是删除上述缓存的代码:
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文档。因为我确信在开头就提到了这一点。