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有两个主要问题:

  1. 根据您的IDE,您需要在IDE或Java代码的项目根目录中放置Mac: RXTXcomm.jarlibrxtxSerial.jnilib PC: RXTXcomm.jarrxtxSerial.dll ,它因IDE而异。 这里的文档没有介绍如何在NetBeans,IntelliJ等不同的IDE中执行此操作,因此我将其用于Eclipse和IntelliJ,但尚未使用NetBeans。 我还有其他问题。
  2. 根据您的操作系统,即使您启动并运行此软件包,例如在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。 因为我确信在开头就提到了这个。