Java RXTXcomm Lib无法加载或找不到

时间:2018-10-08 07:45:07

标签: java raspbian rxtx

我想对nanoCUL868 USB设备进行一次小型测试,以便将一些信号传输到远程设备。该摇杆可与某些第三方软件一起使用,并且我能够与远程设备进行通信。我现在想用JAVA中的以下代码测试这支棍子:

package de.saltest.home;

import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Logger;

import org.openmuc.jrxtx.Parity;
import org.openmuc.jrxtx.SerialPort;
import org.openmuc.jrxtx.SerialPortBuilder;

public class SomfyCULTest {

    private static final Logger log = Logger.getLogger(SomfyCULTest.class.getName());

    public static void main(String[] args) throws IOException {
        log.info("Opening port ttyUSB0");
        SerialPort port = SerialPortBuilder.newBuilder("/dev/ttyAMA0").setBaudRate(9600).setParity(Parity.NONE).build();
        OutputStream out = port.getOutputStream();

        String commandLEDOn = "l01\n";
        String commandLEDOff = "l00\n";

        String encryptionKey = "A1";
        // C - Command (1 = My, 2 = Up, 4 = Down, 8 = Prog)
        String command = "2";
        String rollingCode = "001D";
        String address = "000029";
        String somfyCommand = "Ys" + encryptionKey + command + "0" + rollingCode + address + "\n";
        out.write(somfyCommand.getBytes());
        out.close();
        port.close();

        log.info("Closed port");
    }

}

我已经在Rasperry Pi 3上安装了Oracle Java,并且还通过apt-get获得了librtrx-java。 dpkg-query -L librxtx-java产生:

/usr/lib/jni/librxtxRS485.so
/usr/lib/jni/librxtxRaw.so
/usr/lib/jni/librxtxI2C.so
/usr/lib/jni/librxtxParallel.so
/usr/lib/jni/librxtxSerial.so
/usr/share/java/RXTXcomm.jar

因此,我假设为正确的平台正确安装了这些库。 如果我使用javac编译我的代码:

我收到以下错误消息:

javac -classpath /usr/lib/jni -cp /usr/share/java/RXTXcomm.jar:. src/main/java/de/saltest/home/SomfyCULTest.java
src/main/java/de/saltest/home/SomfyCULTest.java:7: error: package org.openmuc.jrxtx does not exist
import org.openmuc.jrxtx.Parity;
                        ^

我也有一个maven项目,使用此代码可以很好地进行编译,但是由于以下错误,我无法执行它:

 mvn exec:java -Dexec.mainClass=de.saltest.home.SomfyCULTest

[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ serialTest ---
Okt 07, 2018 3:25:41 PM de.saltest.home.SomfyCULTest main
INFORMATION: Opening port ttyUSB0
Could not load lib from jar and from system.
gnu.io.LibLoadException: directory does not exist /libs
        at gnu.io.LibraryLoader.loadLib(LibraryLoader.java:65)
        at gnu.io.LibraryLoader.loadLibsFromJar(LibraryLoader.java:48)
        at gnu.io.LibraryLoader.loadRxtxNative(LibraryLoader.java:29)
        at gnu.io.RXTXCommDriver.<clinit>(RXTXCommDriver.java:85)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:104)
        at org.openmuc.jrxtx.JRxTxPort.openSerialPort(JRxTxPort.java:50)
        at org.openmuc.jrxtx.SerialPortBuilder.build(SerialPortBuilder.java:166)
        at de.saltest.home.SomfyCULTest.main(SomfyCULTest.java:24)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
        at java.lang.Thread.run(Thread.java:748)
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

从这里我迷路了。我已经尝试了很多类似将库复制到其他地方所建议的操作。我还更改了类路径和其他我能想到的东西。但是,似乎没有任何效果。我唯一奇怪的是,我尝试使用java.io。但是代码尝试加载gnu.io。可能有一些不匹配? 任何帮助或解决方案都非常感谢。

谢谢!

3 个答案:

答案 0 :(得分:1)

解决方案似乎是向maven构建中添加一个插件,该插件将生成包含所有依赖项的JAR。如此处所述:https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ 但是,仍然很奇怪,您必须添加如上所述的库路径:

-Djava.library.path=/usr/lib/jni

据我了解,这不再是必需的。但是,如果没有路径,它将无法正常工作。

答案 1 :(得分:0)

您是否尝试将库的本机路径添加为开始参数:

-Djava.library.path=/usr/lib/jni

答案 2 :(得分:0)

我面临着同样的问题,对于解决这些问题,对我有用的步骤

Step1. add RXTXcomm.jar and RXTXcomm-2.2pre2.jar in JAVA_HOME/jre/lib/ext

Step2:- create war file using eclipse or anything

Step3: On the client environment these jar should be store in same location

Step4: Add RXTXcomm.jar and RXTXcomm-2.2pre2.jar in JAVA_HOME/jre/lib/ext of client environment.

注意:-如果未从串行设备获取数据,请检查串行端口上的锁,这可能是其他线程或进程已被占用或未释放锁。

要检查端口上的锁,

命令是fuser /dev/ttyS0,然后

kill -9 PID

我希望这会成功。 使用centos7