PCのEclipse開発環境からダウンロードしてpi4jライブラリを使用してI2Cバス上の9DoFデバイスにアクセスするRaspberry Piモデル3でJavaコードを実行しようとしています。私は次のエラーを取得する:
java -classpath .:classes:/opt/pi4j/lib/'*' -jar /home/pi
/artifacts/RPITank-1.0-SNAPSHOT.jar Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: com/pi4j/io/i2c/I2CFa
ctory$UnsupportedBusNumberException 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.pi4j.io.i2c.I2CFactory$Unsuppor
tedBusNumberException 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
これは私がデバイスがI2Cdetect -y 1を使用してバス1の上に表示され、これはアドレス0x68と0x76でデバイスが表示されていることを確認したコード
package main;
import java.io.IOException;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CFactory;
import devices.I2C.Pi4jI2CDevice;
import devices.sensorImplementations.MPU9250.MPU9250;
public class MPU9250Test {
public static void main(String[] args)
{
I2CBus bus = null;
System.out.println("Attempt to get Bus 1");
try {
final GpioController gpio = GpioFactory.getInstance();
bus = I2CFactory.getInstance(I2CBus.BUS_1);
System.out.println("Got Bus, create devices");
MPU9250 mpu9250 = new MPU9250(
new Pi4jI2CDevice(bus.getDevice(0x68)), // MPU9250 I2C device
new Pi4jI2CDevice(bus.getDevice(0x0C)), // ak8963 I2C
100, // sample rate
100); // sample size
Thread sensor = new Thread(mpu9250);
sensor.start();
Thread.sleep(10000);
sensor.interrupt();
for(int i = mpu9250.getAccelerometerReadingCount() -1; i>0; i--)
{
System.out.print("G: " + mpu9250.getRotationalAcceleration(i).toString());
System.out.print(" A: " + mpu9250.getAcceleration(i).toString());
System.out.println(" M: " + mpu9250.getGaussianData(i).toString());
}
} catch (I2CFactory.UnsupportedBusNumberException | InterruptedException | IOException e) {
e.printStackTrace();
}
}
}
です。
これは実行環境やコードに問題があるかどうかわかりませんが、どんなヘルプも歓迎します。
さらなる実験では、例外ハンドラを削除することはコンパイル時に必要となるオプションではないことが示されています。例外クラスには問題はラズベリーパイに転送し、プロジェクトのjarファイルは問題がnatdanにan issue on github here感謝を経由して解決したRPIにプリインストールされているpi4jソフトウェアへの実行時のリンクを拾っていなかったということでしたここ http://pi4j.com/apidocs/com/pi4j/io/i2c/I2CFactory.UnsupportedBusNumberException.html
でjavaコマンドから削除させた:
クラスパスは、次に、マニフェストエントリとしてMavenのジャーのプラグインの設定に加えました。 java.lang.ClassNotFoundException:com.pi4j.io.i2c.I2CFactory $ Unsuppor tedBusNumberException - クラスパスにそのクラスがあることを確認してください。 – gile
java -classpath。classes:/ opt/pi4j/lib/'*' -jar/home/piこれにはpi4jライブラリが含まれています – gjwo
Eclipseプロジェクトの.pomファイルとRPiの両方がpi4j 1.2-SNAPSHOTを使用するように更新されましたが、これは結果に影響しませんでした。 – gjwo