Я пытаюсь вызватьВызов функции в главном классе из другого класса в Java
public synchronized void refreshGPIOPinState()
в пакете com.rpi.rpi_gpio_controller; (это основная)
из пакета com.rpi.GPIOController; с
mApplication.refreshGPIOPinState();
получение java.lang.NullPointerException ошибки с о линии
package com.rpi.GPIOController;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.wiringpi.GpioInterrupt;
import com.pi4j.wiringpi.GpioInterruptEvent;
import com.pi4j.wiringpi.GpioInterruptListener;
import com.pi4j.wiringpi.Gpio;
import com.pi4j.wiringpi.GpioUtil;
import com.rpi.Utils.Utils;
import com.rpi.rpi_gpio_controller.Rpi_gpio_controllerApplicationUI;
public enum GPIOController {
INSTANCE(true);
final GpioController gpioController = GpioFactory.getInstance();
private Rpi_gpio_controllerApplicationUI mApplication ;
// The used GPIO pins
public GpioPinDigitalOutput[] mGPIOPins = new GpioPinDigitalOutput[1];
// ***************************************
// Constuctor
private GPIOController(boolean setLowOnExit) {
mGPIOPins[0] = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_00, "GPIO_Pin_" + 0, PinState.LOW);
if (setLowOnExit) {
// Set shutdown behavior for all pins
mGPIOPins[0].setShutdownOptions(true, PinState.LOW);
}
}
// ***************************************
// ***************************************
public void GetInput(int trigerpin, int outputpin) throws InterruptedException {
Utils.Output_WriteDebug(true, " GPIO Trigger ... started on " + trigerpin + " OutPutPin " + outputpin);
GpioInterrupt.addListener(new GpioInterruptListener() {
@Override
public void pinStateChange(GpioInterruptEvent event) {
Utils.Output_WriteDebug(true, "Raspberry Pi PIN [" + trigerpin + "] is in STATE [" + event.getState() + "]");
try {
mGPIOPins[outputpin].toggle();
mApplication.refreshGPIOPinState();
} catch (Exception e) {
e.printStackTrace();
}
}
});
// setup wiring pi
if (Gpio.wiringPiSetup() == -1) {
Utils.Output_WriteDebug(true, " ==>> GPIO SETUP FAILED");
}
// export all the GPIO pins that we will be using
GpioUtil.export(trigerpin, GpioUtil.DIRECTION_IN);
// set the edge state on the pins we will be listening for
GpioUtil.setEdgeDetection(trigerpin, GpioUtil.EDGE_BOTH);
// configure GPIO x as an INPUT pin; enable it for callbacks
Gpio.pinMode(trigerpin, Gpio.INPUT);
Gpio.pullUpDnControl(trigerpin, Gpio.PUD_DOWN);
GpioInterrupt.enablePinStateChangeCallback(trigerpin);
}
// ***************************************
}
Когда прерывание происходит вызвать refreshGPIOPinState изменить состояние изображения.
Можете ли вы включить полную стопку? – Mureinik
Существует слишком маленький контекст, чтобы быть уверенным, но похоже, что mApplication является нулевым, когда код выполняется. – ash
mApplication - null. Проверьте объект создан для этого класса .. –