XBee 在 Raspberry Pi 上使用 Java 库
XBee using the Java Lib on Raspberry Pi
我正在尝试使用 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
这意味着所有可从 XBee Java 库中使用的 .jar。
它没有 work.I也试过只是:
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();
}
}
}
提前致谢。
我熬过来了。 :D
我必须在我的 CLASSPATH 中放入绝对库路径,比如 /home/pi/.../libs/xbee-java-library-1.2.1.jar:...
在那之后我遇到了另一个错误,关于 RXTX 库。要通过那个,我需要做一个 sudo apt-get install librxtx-java
就像这里说的
java.library.path 地点
运行 是这样的:
java -Djava.library.path=/usr/lib/jni -cp $XBJL_CLASS_PATH:. com.digi.xbee.example.MainApp
希望对大家有所帮助。
我正在尝试使用 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
这意味着所有可从 XBee Java 库中使用的 .jar。
它没有 work.I也试过只是:
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();
}
}
}
提前致谢。
我熬过来了。 :D
我必须在我的 CLASSPATH 中放入绝对库路径,比如 /home/pi/.../libs/xbee-java-library-1.2.1.jar:...
在那之后我遇到了另一个错误,关于 RXTX 库。要通过那个,我需要做一个 sudo apt-get install librxtx-java
就像这里说的
java.library.path 地点
运行 是这样的:
java -Djava.library.path=/usr/lib/jni -cp $XBJL_CLASS_PATH:. com.digi.xbee.example.MainApp
希望对大家有所帮助。