Lejos EV3 "Null Pointer Exception", но я не уверен, как это исправить

Я работаю над настройкой Java с lejos для своего клуба робототехники, и я создавал некоторые базовые методы привода, но когда я организовал его в методы, он сказал мне, что у меня исключение нулевого указателя. Проблема в том, что я не знаю, где это и как это исправить.


import lejos.hardware.motor.*;
import lejos.hardware.port.*;

public class HardwareMappings {

    EV3LargeRegulatedMotor leftDrive = null;
    EV3LargeRegulatedMotor rightDrive = null;


    public void init(HardwareMappings ahwMap) {
        leftDrive = new EV3LargeRegulatedMotor(MotorPort.B);
        rightDrive = new EV3LargeRegulatedMotor(MotorPort.C);

    }

}

public class DrivetrainMethods {

    HardwareMappings robot = new HardwareMappings();

    public void TimedDrive(int direction, int power, double time) throws InterruptedException {
        robot.leftDrive.setSpeed((power * 60) - direction);
        robot.rightDrive.setSpeed((power * 60) + direction);
        Thread.sleep((long) (time * 60));
        robot.leftDrive.stop(true);
        robot.rightDrive.stop(true);
    }

    public void TankDrive (int leftPower, int rightPower, double time) throws InterruptedException {
        robot.leftDrive.setSpeed(leftPower);
        robot.rightDrive.setSpeed(rightPower);
        Thread.sleep((long) (time * 60));
        robot.leftDrive.stop(true);
        robot.rightDrive.stop(true);
    }
}

public class Test {

    public static void main (String[] args) throws InterruptedException{

        DrivetrainMethods drivetrain = new DrivetrainMethods();

        drivetrain.TimedDrive(0, 50, 1);
        drivetrain.TankDrive(-50, -50, 1);
    }
}

Пожалуйста помоги!
Спасибо

PS (каждый кусок кода должен быть отдельным файлом.)

1 ответ

Решение

Пожалуйста измените:

public void init(HardwareMappings ahwMap) {//this code will be invoked on:
    // someHardwareMappings.init(otherHardwareMappings);
    leftDrive = new EV3LargeRegulatedMotor(MotorPort.B);
    rightDrive = new EV3LargeRegulatedMotor(MotorPort.C);
}

чтобы:

public HardwareMappings() { // this code will be invoked on:
    // new HardwareMappings();)
    leftDrive = new EV3LargeRegulatedMotor(MotorPort.B);
    rightDrive = new EV3LargeRegulatedMotor(MotorPort.C);
}

Это исправит ваш NPE, и вот так выглядит конструктор java (не python!;).

Другие вопросы по тегам