XBee 在 Raspberry Pi 上使用 Java Lib [关闭]

Posted

技术标签:

【中文标题】XBee 在 Raspberry Pi 上使用 Java Lib [关闭]【英文标题】:XBee using the Java Lib on Raspberry Pi [closed] 【发布时间】:2017-09-19 21:37:06 【问题描述】:

我正在尝试使用XBee Java Lib 及其教程在我的 Raspberry Pi 3 上制作一个简单的 Xbee 示例,但我想在将其转换为 .jar 文件之前执行它。我只想将它作为 .class 文件执行,非常简单,之后我想将它导入另一个项目。 (我不擅长 Java,可以看出) 编译后我尝试将其执行为:

java -cp $XBJL_CLASS_PATH:. com.digi.xbee.example.MainApp

我的echo $XBJL_CLASS_PATH 是:

libs/xbee-java-library-1.2.1.jar:libs/rxtx-2.2.jar:libs/slf4j-api-1.7.12.jar:libs/slf4j-nop-1.7.12.jar:libs/android-sdk-5.1.1.jar:libs/android-sdk-addon-3.jar

这意味着所有 .jar 都可以从 XBee Java Lib 中使用。

没用。我也试过了:

java com.digi.xbee.example.MainApp

而且我总是遇到同样的错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/digi/xbee/api/XBeeDevice
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.digi.xbee.api.XBeeDevice
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more

有人知道会发生什么吗?就是说我还没有导入 XBeeDevice,我已经导入了libs/xbee-java-library-1.2.1.jar

PS:代码是这样开头的:

    package com.digi.xbee.example;

    import com.digi.xbee.api.WiFiDevice;
    import com.digi.xbee.api.XBeeDevice;
    import com.digi.xbee.api.exceptions.XBeeException;
    import com.digi.xbee.api.models.XBeeProtocol;

public class MainApp 
    /* Constants */
    // TODO Replace with the port where your sender module is connected to.
    private static final String PORT = "/dev/ttyAMA0/";
    // TODO Replace with the baud rate of your sender module.
    private static final int BAUD_RATE = 9600;

    private static final String DATA_TO_SEND = "Hello XBee World!";

    public static void main(String[] args) 
        XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE);
        byte[] dataToSend = DATA_TO_SEND.getBytes();

        try 
            myDevice.open();

            System.out.format("Sending broadcast data: '%s'", new String(dataToSend));

            if (myDevice.getXBeeProtocol() == XBeeProtocol.XBEE_WIFI) 
                myDevice.close();
                myDevice = new WiFiDevice(PORT, BAUD_RATE);
                myDevice.open();
                ((WiFiDevice)myDevice).sendBroadcastIPData(0x2616, dataToSend);
             else
                myDevice.sendBroadcastData(dataToSend);

            System.out.println(" >> Success");

         catch (Exception e) 
            System.out.println(" >> Error");
            e.printStackTrace();
            System.exit(1);
        
         finally 
            myDevice.close();
        
    

提前致谢。

【问题讨论】:

【参考方案1】:

我已经通过了。 :D 我必须在我的 CLASSPATH 中放入绝对库路径,例如 /home/pi/.../libs/xbee-java-library-1.2.1.jar:...

在那之后我又遇到了另一个错误,说的是 RXTX 库。为了通过那个,我需要做一个sudo apt-get install librxtx-java,就像这里所说的 java.library.path location 并像这样运行它:

java -Djava.library.path=/usr/lib/jni -cp $XBJL_CLASS_PATH:. com.digi.xbee.example.MainApp

希望对某人有所帮助。

【讨论】:

以上是关于XBee 在 Raspberry Pi 上使用 Java Lib [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry Pi、Python、XBee 到 Arduino Xbee.write() 错误

在Raspberry Pi上使用python3进行Bash

sh 使用Raspbian在Raspberry Pi上安装mitmproxy的说明。

使用python3在Raspberry Pi上打开和关闭Tkinter GUI

在 Raspberry Pi Jessie 上使用 OpenGL

在树莓派2代B型/3代 上安装Fedora23 - Installing Fedora 23 on Raspberry Pi 2 model B or Raspberry Pi 3