![](/img/trans.png)
[英]Exception in thread “main” java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener
[英]Exception in thread "main" java.lang.NoClassDefFoundError: com/pi4j/io/gpio/GpioFactory
尝试运行我的 Java 程序时出现这些错误
Exception in thread "main" java.lang.NoClassDefFoundError: com/pi4j/io/gpio/GpioFactory
at FileWatch.main(FileWatch.java:53)
Caused by: java.lang.ClassNotFoundException: com.pi4j.io.gpio.GpioFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
这是我的代码,
public class FileWatch {
static String clkID;
static String clkID2;
static String ts;
static String ts1;
static boolean done = false;
static boolean REdone = false;
static boolean finished = false;
static boolean ready;
static String host ="jdbc:mysql://localhost/dancers";
static String username ="root";
static String password ="beaker19";
public static void main(String[] args) throws IOException,
InterruptedException {
// create gpio controller
final GpioController gpio = GpioFactory.getInstance();
// provision gpio pin #01 as an output pin and turn on
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);
while (true) {
done = false;
REdone=false;
checkFile();
pin.high();
Thread.sleep(3000);
REcheckFile();
Thread.sleep(500);
//Thread.
if (clkID.equals(clkID2)) {
uploadTimes();
}
else {
System.out.println("Wrong matching ID's");
}
Thread.sleep(1000);
pin.low();
}
}
我从来没有用过 pi4j,所以我不知道我哪里出错了!! 这似乎是 gpiofactory 类的问题,但我还没有对它进行任何更改,也不确定我在互联网上可以阅读的内容是什么,这是导入包的问题...
我是这样编译的:
pi@raspberrypi ~/rpi2ardu $ javac -cp .:mysql-connector-java-3.1.1.jar:/opt/pi4j/lib/'*' FileWatch.java
我解决了同样的问题。
找到您的应用清单文件。 一个是默认创建的,位于您的源代码树下=>META-INF=>MANIFEST.MF
简单地,向其中添加一个类路径,即 pi4j JAR 文件所在的位置,它应该如下所示:
{
Manifest-Version: 1.0
Main-Class: yourclassname.Main
Class-Path: /opt/pi4j/lib/pi4j-core.jar /opt/pi4j/lib/pi4j-device.jar /opt/pi4j/lib/pi4j-gpio-extension.jar /opt/pi4j/lib/pi4j-service.jar
}
构建您的文件,执行它。
我遇到了类似的情况,下面的链接帮助了我。 我忘记做的是在类路径中添加当前工作目录。
“。” 用于当前工作目录
Raspbian 上的示例
java -classpath .:/opt/pi4j/lib/'*' FileWatch
有答案的链接 - https://www.raspberrypi.org/forums/viewtopic.php?f=34&t=23239
不使用 '*'
-cp .:mysql-connector-java-3.1.1.jar:/opt/pi4j/lib/'*'
只需按如下方式使用它,
-cp .:mysql-connector-java-3.1.1.jar:/opt/pi4j/lib
或者
export CLASSPATH=mysql-connector-java-3.1.1.jar:/opt/pi4j/lib/pi4j-core.jar:/opt/pi4j/lib/pi4j-device.jar:/opt/pi4j/lib/pi4j-gpio-extension.jar:/opt/pi4j/lib/pi4j-service.jar:$CLASSPATH
供将来使用。
添加lib路径命令-Djava.ext.dirs=/path到执行命令,它们指向pi4j-core jar
例子:
sudo java -Djava.ext.dirs=/"pi4j-core jar 的路径" -jar "/jar 的路径"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.