【问题标题】:Java RXTXcomm Lib does not load or is not to be foundJava RXTXcomm Lib 未加载或找不到
【发布时间】:2018-10-08 07:45:06
【问题描述】:

我想用 nanoCUL868 USB 设备做一个小测试,以便将一些信号传输到远程设备。该棒可与某些第 3 方软件配合使用,并且我能够与远程设备进行通信。我现在想在 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。可能有一些不匹配? 非常感谢任何帮助或解决方案。

谢谢!

【问题讨论】:

    标签: java raspbian rxtx


    【解决方案1】:

    解决方案似乎是在 maven 构建中添加一个插件,该插件会生成一个包含所有依赖项的 JAR。就像这里描述的:https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ 然而,奇怪的是,你必须像上面提到的那样添加库路径:

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

    据我了解,这不再是必要的了。然而,没有路径,它是行不通的。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我已经尝试过了,但似乎效果不佳。
      【解决方案3】:

      我面临同样的问题,为了解决问题,对我有用的步骤

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 2016-01-16
        • 2021-06-06
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 2016-08-12
        相关资源
        最近更新 更多