Java RXTX Library不加载本机库
基本上我想使用RXTX Library for java为我的Arduino编写一个简单的通信工具,并且在加载动态库时失败了。
我的系统规格:
操作系统:OS X Yosemite 10.10.3
Java:SDK 1.8.0_45
RXTX:2.1-7r2 – 运行64位java的intel mac的修改版本,可以在这里找到。
IDE:NetBeans 8
我检查过,这些文件按照安装说明工作,这只是将这两个文件复制到/ Library / Java / Extensions目录中。
现在我想删除它们并从我的应用程序加载库。 我做了以下事情:
- 在netbeans中将RXTXcomm库添加到项目中。
- 使用以下代码在“java.library.path”属性中包含本机库的容器
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
现在我想知道我做错了什么(也许是一些很大的误解?)
任何帮助,将不胜感激!
这是对您的问题的解释和对解决方案的建议。
在我看来,RXTX有两个主要问题:
- 根据您的IDE,您需要在IDE或Java代码的项目根目录中放置Mac:
RXTXcomm.jar
和librxtxSerial.jnilib
PC:RXTXcomm.jar
,rxtxSerial.dll
,它因IDE而异。 这里的文档没有介绍如何在NetBeans,IntelliJ等不同的IDE中执行此操作,因此我将其用于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); } } }
- 查看JSSC代码的所有示例
- 包可以在这里下载。
- JSSC主页
注意:这是一个公开的答案,如果你们中的任何一个人有这方面的经验,请通过编辑答案做出贡献。 我看到人们提问并且与RXTX一般有相同的问题。
我有同样的问题,但相信我知道原因。
我之前在OSX(Maverick)上运行了RXTX,但发现我只需要Java 8 JDK中提供的function。 我在机器上的Java 6 JDK上安装了它,一旦完成就无法使用RXTX库运行任何代码。
我认为问题在于6后的JDK版本不包含RXTX所需的32位环境。
如果您使用的是较新的JDK,那么我建议您安装Java 6 JDK并查看这是否可以解决您的问题。 在以前运行我编译的程序时,我需要包含“-d32”来指定使用32位环境。 即:“java -d32 test”
除了我最近的答复之外。
这是删除上述缓存的代码:
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 doc。 因为我确信在开头就提到了这个。